2017-02-03 8 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-特定のタブでアクティビティを開始する) –

+1

あなたは「私はそれを行うことはできますか?」と尋ねています。やってみなよ。インテントをonTabSelectedから起動し、参照してください。 – Gudin

+0

単純に_int position = tab.getPosition();を使用してください。 – Piyush

答えて

0

これを試してみてください。

は、この理由はFragmentPagerAdapterが、それは永遠にメモリにロードするすべてのビューを保つことである代わりにFragmentStatePagerAdapterを使用しています。それが代わりにロードするあなたのフラグメントたびに再作成されます

private class ViewPagerAdapter extends FragmentStatePagerAdapter { 

    //... your existing code 

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

} 

source

:現在

の範囲外の景色のFragmentStatePagerAdapter処分は、例えばアダプタ方法getItemPosition

をオーバーライドする場合はメモリから最初に..

アクティビティを開始するには

私は同じ要件を持っていた
+0

それは動作しません。その活動を開きますが、私が戻るボタンを押すと、断片化ページ@ rafsanahmad007 –

+0

があなたのタブ付き活動の 'onBackpressed'を上書きして' MainActivity'や他の活動を開きます – rafsanahmad007

0

、私がやったことはRelativeLayout &がTextViewの上でクリックイベントを適用する使用TabLayoutの中心部に重複のTextViewが..ですあなたの特定のフラグメントのonCreate()

・ホープこのことができますでそれを行います。 I私のレイアウトを投稿することができないのが重複する可能性

enter image description here

関連する問題