我打算将现有的 android 应用程序转换为片段布局。
这个想法是拥有经典的两个面板布局(左侧的项目列表,右侧的详细信息)。
实际上,该应用程序由 4 个活动组成:
- 具有所有可用选项的 ChoiceListActivity
- 3 种不同的活动,针对工具上可用的每个操作进行一项。
现在我开始进行转换并创建了一个 FragmentActivity 类,这是主类:
public class MainFragment extends FragmentActivity {
private static final String TAG = "MainFragment";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
if(findViewById(R.id.fragment_container)!=null){
Log.i(TAG, "No Tablet");
Intent i = new Intent(MainFragment.this, main.ChoiceActivity.class);
startActivity(i);
} else {
Log.i(TAG, "Tablet");
}
}
}
我创建了一个 ChoiceListFragment:`
public class ChoiceListFragment extends ListFragment {
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Toast.makeText(getActivity(), getListView().getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
super.onListItemClick(l, v, position, id);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String[] options = getResources().getStringArray(R.array.listitems);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(inflater.getContext(), R.layout.list_item, options);
setListAdapter(adapter);
return super.onCreateView(inflater, container, savedInstanceState);
}
}
该片段将位于面板的左侧。
我的问题是右侧。这个想法是,对于列表的每个元素,将显示相应的活动(或片段?)。
那么正确的方法是什么?
当用户选择一个项目时,在正确的片段中启动一个活动是个好主意吗?
或者我必须以编程方式在片段之间切换?以及如何做到这一点(我找到了很多教程,但他们总是使用相同的活动来更改右侧面板中的一些数据)?
我为正确的片段创建了以下类(但我不确定我做对了):
public class RightFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.main, container, false);
}
}
我注意到我最终可以在 onCreate 方法期间使用 LayoutInflater 对象更改布局,但这只是在屏幕上切换布局,布局中声明的对象未初始化(也未添加 eventListener 等)。那么该怎么做呢?
也许我应该创建一个 Intent 并使用 startActivity 来启动现有的活动,或者这是一个片段的坏主意?
实际上xml布局是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<fragment
android:id="@+id/choicelist_fragment"
android:name="main.fragments.ChoiceListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/right_fragment"
android:name="main.fragments.RightFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2" />
</LinearLayout>