Seb*_*oth 9 android android-fragments
在一个片段中,在一个活动中调用我正在显示这样的总线行列表:

然后,一旦用户点击"站点",我当然希望显示站点列表.我正在使用此代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_long_distance);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.f_long_distance, new LongDistanceFragment()).commit();
}
@SuppressWarnings({"UnusedDeclaration"})
public void showStationList(View view) {
String tag = (String) view.getTag();
if (tag != null && tag.length() > 0) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
StationListFragment fragment = new StationListFragment(tag.split(","));
ft.add(R.id.f_long_distance, fragment);
// ft.replace(R.id.f_long_distance, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
此活动的XML是:
<LinearLayout
android:id="@+id/ll_container"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/f_long_distance"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
StationListFragment是一个显示在另一个上面的简单ListFragment:

尽管ActionBar运行良好,它现在只适用于Title.
什么是行不通的,如果我现在回来.站点列表已隐藏,但旧的ActionBar未恢复:

文档说添加ActionBar的方法是使用onCreateOptionsMenu方法等.
所以,在LongDistanceFragment(显示的第一个)中,我正在创建这样的栏:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
Log.d(TAG, "onViewCreated");
super.onViewCreated(view, savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
ActionBar bar = getSupportActivity().getSupportActionBar();
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
bar.setListNavigationCallbacks(new SimpleSpinnerArrayAdapter(getActivity()), this);
}
Run Code Online (Sandbox Code Playgroud)
但不知何故,一旦用户回到Fragment中,它就无法恢复.
我认为需要一种在回滚片段事务时恢复ActionBar状态的方法.
我错过了什么?谢谢你的帮助.
如果我正确理解您的代码,问题可能在您的内部StationListFragment.
ActionBar与Activity本身相关联,而不是其中的特定Fragment.
我猜测你在StationListFragment中修改ActionBar以显示"Stations"标题并禁用List导航模式.在这种情况下,按后退按钮撤消事务 - 有效删除StationListFragment - 但不会自动撤消您可能对Activity的Action Bar所做的任何更改.
您需要做的是覆盖站列表片段中的一个状态更改处理程序,以在删除/隐藏ActionBar更改时撤消它.
更好的方法是使用一个replace交易交换LongDistanceFragment与StationListFragment(而不是增加后者对前者的顶部).然后让他们设置了适当的时候,他们成为你可以添加代码,配置操作栏的每个片段可见(通过覆盖onResume)而不是在移除一个之后尝试清理.
| 归档时间: |
|
| 查看次数: |
10479 次 |
| 最近记录: |