在我的应用中,我正在使用NAVIGATION_MODE_TABS
- 模式中的操作栏开发活动。
每个选项卡都显示一个片段(列表,详细信息)。
最初列表选项卡是可见的。
该列表正在实施setMultiChoicheModeListener()
,如果选择了一个或多个项目,则会修改ActionBar
和活动的标题。
当用户点击详细信息选项卡而不取消选择项目时,如何将标题和ActionBar
重置为初始值(标题和操作)?
BTW目标平台> 4.1我没有使用支持库。
感谢。
public class MyActivity extends Activity {
@Override
protected void onCreate (Bundle savedInstanceState) {
this.actionBar = getActionBar();
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
....
for (Tab tab : getTabs())
{
//here are two tabs added (List and Detail)
this.actionBar.addTab(tab);
}
....
}
protected class NavigationTabListener implements ActionBar.TabListener {
private Fragment fragment;
....
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.replace(newFragmentResourceId, this.fragment);
}
}
}
public class MyListViewFragment extends LinearLayout implements IListViewFragment {
....
@Override
public void initialize() {
inflate(getContext(), listLayoutResourceId, this);
this.myList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
this.myList.setMultiChoiceModeListener(new MultiChoiceModeListener() {
....
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(selectedItemsMenuResourceId, menu);
return true;
}
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)
{
if (checked)
{
this.numberItemsSelected++;
adapter.setNewSelection(position);
}
else
{
this.numberItemsSelected--;
adapter.removeSelection(position);
}
mode.setTitle(getContext().getResources().getQuantityString(
R.plurals.items_selected, this.numberItemsSelected,
Integer.valueOf(this.numberItemsSelected)));
}
....
}
}
我正在尝试实施MVP模式,但它仍处于评估阶段。 Activity充当演示者,视图位于不同的类中。
对于每个片段,我也在实现MVP apttern,但我认为这对解决问题并不感兴趣。
课程的一些注释:
MyActivity
创建两个片段(一个用于List,一个用于Detail视图,详细视图与所选项目无关)。
活动的初始视图是带有列表的片段。
如果用户选择了某些条目,我将通过MultiChoiceModeListener
的回调更新操作栏和标题。
但是用户现在可以通过单击“详细信息”选项卡更改片段而不取消选择项目或单击操作栏中的新元素,结果是显示了详细信息片段,但活动的标题仍然是我在MultiChoiceModeListener
中修改了一个,并且还有可见的操作栏的复选标记(由系统自动创建)。
所以最好的方法是我想以某种方式得到当前ActionMode
,所以我可以调用finish()来“重置”ActionBar
和标题。
答案 0 :(得分:0)
确保您在活动中ActionMode
方法中ActionMode.Callback
继续引用ActionBar.TabListener
。
选择新选项卡后,只需完成操作模式,如:
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if(mActionMode != null){
mActionMode.finish();
}
ft.replace(newFragmentResourceId, this.fragment);
}
调用ActionMode
时,将onDestroyActionMode(ActionMode)
引用恢复为null。