现在我有一个使用viewpager显示多个片段的活动。每个片段都在片段中实现了一个Context Action Bar。我试图将其设置为如果用户在片段之间滚动或标记,则解除之前所选片段的ActionBar。
我想我需要在.finish()
的片段中对CAB OnPageChangeListener()
进行某种调用,但我不完全确定如何或在何处这样做。
答案 0 :(得分:1)
创建每个片段中的公共函数,可以调用它来完成ActionMode。可能看起来像这样
public void finishActionMode(){
[YOUR_ACTIONMODE_VARIABLE].finish();
}
然后在您保存ViewPager的活动中,你应该以某种方式保留或获取ViewPager中应该关闭其ActionMode的片段的引用,然后在你的onPageSelected中你可以调用`[YOUR_FRAGMENT_REFERENCE] .finishActionMode();
像这样:
mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
[YOUR_FRAGMENT_REFERENCE].finishActionMode();
}
...
});
要保持对ViewPagers片段的引用,请在此处查看:Retrieve a Fragment from a ViewPager
答案 1 :(得分:0)
您不必为每个片段创建单独的上下文操作栏(CAB)。您只需在TabbedActivity(带分页器的活动)中创建一个 STATIC CAB,并在需要时随时使用它们。
以下是 TabbedActivity.java
的代码片段public class TabbedActivity extends AppCompatActivity {
public static ActionMode uniActionMode=null;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
if(uniActionMode!=null)
uniActionMode.finish();
}
@Override
public void onPageSelected(int position)
{
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
mViewPager.addOnPageChangeListener
用于检查用户是否在片段中移动。现在你要做的就是从任何地方创建一个ActionMode,然后将值传递给静态uniActionMode
变量。
mActionModeCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
// Inflate a menu resource providing context menu items
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_selection, menu);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
mode.finish();
return true;
case R.id.action_mark_read:
mode.finish();
return true;
}
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
};
TabbedActivity.uniActionMode= v.startActionMode(mActionModeCallback);
此处TabbedActivity.uniActionMode
引用选项卡式活动的ActionMode对象。因此,回调将传递给TabbedActivity.uniActionMode
。