2017-02-03 10 views
1

Я хочу реализовать TablayoutaddOnTabSelectedListener, чтобы открыть новую активность на определенной вкладке. Есть 3 вкладки, и в настоящее время они связаны с фрагментами. Я хочу начать работу, когда я нажимаю вкладку позиции 1. Я могу сделать это в onTabSelected, но перед открытием он показывает фрагмент, прикрепленный к тому же положению. Как удалить этот фрагмент?открытая активность на выбранной вкладке

public class MainActivity extends AppCompatActivity { 

    private TabLayout tabs; 
    private ViewPager viewpager; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     tabs = (TabLayout)findViewById(R.id.tabs); 
     viewpager = (ViewPager)findViewById(R.id.viewpager); 
     setupViewPager(viewpager); 


     tabs.addTab(tabs.newTab()); 
     tabs.addTab(tabs.newTab()); 
     tabs.addTab(tabs.newTab()); 

     tabs.setupWithViewPager(viewpager); 

     tabs.addOnTabSelectedListener(onTabSelectedListener(viewpager)); 

    } 

    private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) { 

     return new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }; 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new Frag1(), "ONE"); 
     adapter.addFragment(new Frag2(), "TWO"); 
     adapter.addFragment(new Frag3(), "THREE"); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs)); 
     onTabSelectedListener(viewPager); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

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

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 


     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 
} 


    private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) { 

     return new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }; 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new Frag1(), "ONE"); 
     adapter.addFragment(new Frag2(), "TWO"); 
     adapter.addFragment(new Frag3(), "THREE"); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs)); 
     onTabSelectedListener(viewPager); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

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

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

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

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 


     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
     } 
    } 

} 
+0

Возможного дубликат [Как начать деятельность с определенной вкладкой?] (Http://stackoverflow.com/questions/11124372/how-to- run-a-activity-with-a-specific-tab) –

+1

Вы спрашиваете: «Могу ли я это сделать ...?». Просто попробуйте. Запустите Intent из onTabSelected и посмотрите. – Gudin

+0

Просто используйте _int position = tab.getPosition(); _ – Piyush

ответ

0

попробовать это:

использовать FragmentStatePagerAdapter вместо причина этого заключается в том, что FragmentPagerAdapter будет держать все мнения, которые он загружает в память навсегда. Там, где FragmentStatePagerAdapter располагает видами, которые выходят за пределы текущего

Также Переопределить метод адаптера getItemPosition

Например:

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

    //... your existing code 

    @Override 
    public int getItemPosition(Object object){ 
     return PagerAdapter.POSITION_NONE; 
    } 

} 

source

будет воссоздать свой фрагмент каждый раз вместо загрузки они из памяти сначала.

Чтобы начать деятельность сделать это в вашем конкретном фрагменте onCreate()

Надеется, что это помогает ..

+0

Не работает. Его действие открывается, но когда я нажимаю кнопку «Назад», его показывает страницу фрагмента @ rafsanahmad007 –

+0

перезаписывает 'onBackpressed' в вашей активности с вкладками, чтобы открыть« MainActivity »или другое действие – rafsanahmad007

0

У меня был то же требование, что я сделал это перекрытие TextView на центре TabLayout с помощью RelativeLayout & применить событие щелчка на TextView. Я не могу отправить мой макет, пожалуйста, смотрите DEMO изображения

enter image description here