1

Я новичок в программировании на Android, и у меня есть один вопрос. В моем приложении у меня есть ViewPager (с некоторыми фрагментами), а наверху у меня есть панель инструментов с иконками меню. Можно ли показывать разные значки, когда пользователь выбирает разные страницы ViewPager. Я знаю метод onPageSelected из OnPageChangeListener, который работает, когда пользователь выбирает страницу, но я точно не понимаю, как сменить значки. Может ли кто-нибудь дать мне примеры или статьи об этом. Благодаря!Различные значки меню на разных страницах viewpager

+1

попробуйте google ... :) –

ответ

1

Во всех фрагментах, которые вы используете в виде использовании пейджера:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.grid_to_list, menu); 
     MenuItem item = menu.findItem(R.id.grid_to_list); 
     item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       switch (item.getItemId()) { 
       case R.id.grid_to_list: 

        //Your stuff 
        break; 

       } 
       return false; 
      } 

     }); 
     super.onCreateOptionsMenu(menu, inflater); 
    } 

и в методе onCreateView написать это:

setHasOptionsMenu(true); 
+0

Hello Surender Kumar! Я пытаюсь использовать этот код, и у меня есть один вопрос, потому что у меня есть ошибка в этой строке MenuItem item = menu.findItem (R.id.grid_to_list); Что здесь означает grid_to_list? Ид, что здесь мне нужно использовать? –

+0

Его идентификатор элемента меню, как мы используем идентификатор виджетов макета в нашей деятельности, тот же идентификатор элемента меню будет использоваться здесь. –

1

Это возможно. Если у вас 2 страницы, создайте 2 файла ресурсов меню res > menu. например

menu_one.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="mcrime.com.mcrime.MainActivity"> 



     <item 
      android:id="@+id/send_icon" 
      android:orderInCategory="100" 
      android:icon="@drawable/ic_send_white_24dp" 
      android:title="Send Report" 
      app:showAsAction="always" /> 

    </menu> 

menu_2.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="mcrime.com.mcrime.MainActivity"> 

    <item 
     android:id="@+id/make_a_call" 
     android:orderInCategory="100" 
     android:icon="@drawable/ic_call_white_24dp" 
     android:title="Make Call" 
     app:showAsAction="always" /> 

</menu> 

Тогда на вашем MainActivity:

private ToolBar toolbar; 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.your_activity_name); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     setUpVariables(); 

     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

private void setUpVariables(){ 

     ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 
     SlidingTabLayout slidingTabLayout = (SlidingTabLayout) findViewById(R.id.tab_layout); 

     viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); 
     slidingTabLayout.setCustomTabView(R.layout.tab_view, R.id.tab_text_view); 
     slidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
      @Override 
      public int getIndicatorColor(int position) { 
       return getResources().getColor(R.color.colorAccent) ; 
      } 
     }); 

     slidingTabLayout.setDistributeEvenly(true); 
     slidingTabLayout.setViewPager(viewPager); 

     viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       if(position == 0){ 
        MCrime.this.setTitle("Your custom title"); 
        toolbar.getMenu().clear(); 
        toolbar.inflateMenu(R.menu.menu_one); 
       } else if(position == 1){ 
        MCrime.this.setTitle("Your custom title"); 
        toolbar.getMenu().clear(); 
        toolbar.inflateMenu(R.menu.menu_2); 
       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

    } 

Вы должны создать пейджер адаптера

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

     String [] titles = {"Title One", "Title Two", }; 

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

     @Override 
     public Fragment getItem(int position) { 
      Fragment fragment; 
      if(position == 0){ 
       fragment = new FragmentOne(); 
       return fragment; 
      } 

      if(position == 1){ 
       fragment = new FragmentTwo(); 
       return fragment; 
      } 


      return null; 
     } 

     @Override 
     public int getCount() { 
      return 2; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return titles[position]; 
     } 
    } 
Смежные вопросы