0

私は、fragmentpagerアダプタを使用してicsスタイルのactionBarを作成するアクティビティを持っています。各ページはactionBarを更新する必要があります。 onPageSelectedonCreateOptionsMenuと電話する方法はありますか?Android FragmentActivity/FragmentPagerAdapterとactionBar update onCreateOptionsMenu

私は簡単のために以下の例から多くのコードを削除しました。

public class ListFragmentViewPagerActivity extends FragmentActivity { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.thread_view); 

     ViewPager pager = (ViewPager) findViewById(android.R.id.list); 
     pager.setAdapter(new ExamplePagerAdapter(getSupportFragmentManager())); 
     TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicator); 
     indicator.setViewPager(pager); 
     indicator.setOnPageChangeListener(new OnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 

       } 

      @Override 
      public void onPageScrollStateChanged(int arg0) {     
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) {     
      } 
     }); 
    } 

    public class ExamplePagerAdapter extends FragmentPagerAdapter implements TitleProvider{ 

     public ExamplePagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return URLS.size(); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Fragment fragment = new ThreadFragment(); 

      // set arguments here, if required 
      Bundle args = new Bundle(); 
      fragment.setArguments(args); 

      return fragment; 
     } 

     @Override 
     public String getTitle(int pos) { 
      return TITLES.get(pos); 
     } 

    } 

    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater menuinflate = new MenuInflater(this); 
     menuinflate.inflate(R.menu.thread_menu, menu); 
     if (type.equals("xda")) { 
      menu.removeItem(R.id.ss_view); 
     } 

      //This worked when I only needed to call it one time. I need to update this menu for each page in my viewPager though. 
     if (isFav) { 
      menu.getItem(2).setIcon(R.drawable.fav_ab); 
     } 
     return true;   
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case android.R.id.home: 
       Intent intent = new Intent(this, MainActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent); 
      break; 
      case R.id.ss_view: 
       Intent ssi = new Intent(this, SSActivity.class); 
       ssi.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       Bundle b = new Bundle(); 
       ssi.putExtras(b); 
       startActivity(ssi); 
      break; 
      case R.id.restart: 
      break; 
      case R.id.fav_ab: 
       break; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
     return false; 
    }  
} 

UPDATE 私onPageSelectedでinvalidateOptionsMenu()を呼び出すには、()のトリックをやりました!

答えて

2

invalidateOptionsMenu()を使用してください。ただし、3.0以下のanythignをサポートしている場合は、このメソッドをtrycatchでラップしてください。このメソッドは存在しないため、クラッシュします。

3.0より前のデバイスでメニューを更新する場合は、メニューが開くたびに呼び出されるonPrepareOptionsMenu()も無効にします。

+0

知っておきたいことです。ヘッドアップをありがとう。 – r2DoesInc

関連する問題