现在我有一个使用 viewpager 来显示几个片段的活动。这些片段中的每一个都在片段中实现了一个上下文操作栏。我试图让它在如果用户在片段之间滚动或选项卡时,先前选择的片段的 ActionBar 将被解除。
.finish()
我想我需要在我的片段中对 CAB 进行某种调用,OnPageChangeListener()
但是我不完全确定如何或在哪里这样做。
现在我有一个使用 viewpager 来显示几个片段的活动。这些片段中的每一个都在片段中实现了一个上下文操作栏。我试图让它在如果用户在片段之间滚动或选项卡时,先前选择的片段的 ActionBar 将被解除。
.finish()
我想我需要在我的片段中对 CAB 进行某种调用,OnPageChangeListener()
但是我不完全确定如何或在哪里这样做。
在每个片段中创建一个公共函数,可以调用该函数来完成 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();
}
...
});
为了保持对 ViewPager 片段的引用,请看这里:Retrieve a Fragment from a ViewPager
您不必为每个片段创建单独的上下文操作栏 (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
.