2014-01-28 58 views
3

現在我有一個使用viewpager顯示多個片段的活動。每個片段都在片段中實現了一個上下文操作欄。如果用戶在片段之間滾動或製表符,我試圖將其放在哪裏,以前選定片段的ActionBar將被解除。當viewpager發生變化時關閉上下文操作欄

我想我需要在我的OnPageChangeListener()的片段中對CAB .finish()進行某種調用,但我不完全確定如何或在哪裏做到這一點。

+0

爲什麼?當你回到那個片段時它是否必須重新出現? –

+0

不,我只是希望它在離開那個片段時離開。 – gsueagle2008

回答

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

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

相關問題