2016-04-09 7 views
0

サポートTabLayoutの5番目のタブをクリックしたときにDialogFragmentポップアップを表示すると、5番目のアイテムをクリックしたときにフラグメントまたはタブの位置を置き換えたくありません。それを達成するために私は以下のことをしました。アンドロイドサポートを使用してタブをクリックするとダイアログを表示するTabLayout?

TabViewPagerAdapter adapter = new TabViewPagerAdapter(getSupportFragmentManager()); 
adapter.addFragment(ProfileFragment.create(mProfileId), getString(R.string.profile)); 
adapter.addFragment(NewsFragment.create(getString(R.string.news_feed)), getString(R.string.news_feed)); 
adapter.addFragment(AlertFragment.create(mProfileId), getString(R.string.alert)); 
adapter.addFragment(EventsFragment.create(mProfileId), getString(R.string.events)); 
//Logic implemented to show an empty fragment 
adapter.addFragment(new Fragment(), getString(R.string.more)); 

アダプタ

public class TabViewPagerAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public TabViewPagerAdapter(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); 
    } 

} 

アンドモアダイアログ

((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(4).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       MoreDialogFragment newFragment = MoreDialogFragment.newInstance(); 
       newFragment.show(ft, "ReserveChooser"); 
      } 
     }); 

を示すそして私は、最新のサポートライブラリを更新するまでそれがうまく働いてため。更新後、ダイアログが表示されますが、同時に空のフラグメントを置換/表示するタブ項目、つまり選択したくない5番目のタブが表示されます。コメントはありますか?

答えて

-1

あなたがこの試すことができます:私はそれを行っているが、知らない

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       if(tab.getPosition() == 4){ 
        //show dialog 
       } 
      } 

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

      } 

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

      } 
     }); 
+0

からの確認を待っていることはそれが表示されますことを行うには正しい方法です。私の要件を参照してください。 – Stella

0

は、経験豊富な1

((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(4).setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       int action = event.getAction(); 
       if (action == MotionEvent.ACTION_UP) { 
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
        MoreDialogFragment newFragment = MoreDialogFragment.newInstance(); 
        newFragment.show(ft, "ReserveChooser"); 
        return true; 
       } 
       return false; 
      } 
     }); 
関連する問題