現在我有一個使用viewpager顯示多個片段的活動。每個片段都在片段中實現了一個上下文操作欄。如果用戶在片段之間滾動或製表符,我試圖將其放在哪裏,以前選定片段的ActionBar將被解除。當viewpager發生變化時關閉上下文操作欄
我想我需要在我的OnPageChangeListener()
的片段中對CAB .finish()
進行某種調用,但我不完全確定如何或在哪裏做到這一點。
現在我有一個使用viewpager顯示多個片段的活動。每個片段都在片段中實現了一個上下文操作欄。如果用戶在片段之間滾動或製表符,我試圖將其放在哪裏,以前選定片段的ActionBar將被解除。當viewpager發生變化時關閉上下文操作欄
我想我需要在我的OnPageChangeListener()
的片段中對CAB .finish()
進行某種調用,但我不完全確定如何或在哪裏做到這一點。
在每個可調用的片段中創建一個公共函數來完成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
您不必創建單獨的上下文操作欄(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
。
爲什麼?當你回到那個片段時它是否必須重新出現? –
不,我只是希望它在離開那個片段時離開。 – gsueagle2008