我看过很多看似相关的问题,但是我找不到那个我正在寻找的问题。
我有一个应用程序,在MainActivity中有一个ViewPager。 ViewPager中的一个片段是ListFragment。 我想在用户单击List项时启用新Fragment的创建, 使用onListItemClick函数。 新的Fragment将取代ViewPager,并将显示其布局和数据。 我还想允许单击“后退”按钮,这将使用户返回到PageViewer的先前状态。
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
StationDescriptionFragment newFragment = new StationDescriptionFragment();
Bundle args = new Bundle();
args.putString(StationDescriptionFragment.ARG_DESCRIPTION, this.stationsList.get(position).getDescription());
newFragment.setArguments(args);
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
getListView().setItemChecked(position, true);
}
此代码位于Fragment中,它是ViewPager的一部分。 此代码结束后,此应用程序结束后,应用程序崩溃。我确信这个功能结束了。
崩溃是:
FragmentManagerImpl.throwException(RuntimeException) line: 462
StationDescriptionFragment类:
public class StationDescriptionFragment extends Fragment {
final static String ARG_DESCRIPTION = "description";
String mCurrentDescription = "";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (savedInstanceState != null) {
mCurrentDescription = savedInstanceState.getString(ARG_DESCRIPTION);
}
return inflater.inflate(R.layout.description_view, container, false);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
updateDescription("Some Description");
}
public void updateDescription(String description) {
TextView desc = (TextView) getActivity().findViewById(R.id.description);
desc.setText(description);
mCurrentDescription = description;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(ARG_DESCRIPTION, mCurrentDescription);
}
}
description_view.xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:textSize="18sp" />
任何帮助将不胜感激。 感谢。
答案 0 :(得分:1)
新的Fragment将取代ViewPager,并将显示它 布局和数据。我还想允许点击后退按钮 将用户返回到PageViewer的先前状态。
如果您想要替换ViewPager
(我假设在另一个片段中)及其页面片段,请使用普通FragmentManager
而不是getChildFragmentManager()
返回的getChildFragmentManager()
。旨在实现嵌套片段。 R.id.fragment_container
会在当前片段的视图中查找该id(将新片段放入),我认为ViewPager
是容纳{{1}的片段的容器的id }:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
getListView().setItemChecked(position, true); // call this before the transaction
StationDescriptionFragment newFragment = new StationDescriptionFragment();
Bundle args = new Bundle();
args.putString(StationDescriptionFragment.ARG_DESCRIPTION, this.stationsList.get(position).getDescription());
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}