2017-07-26 11 views
0

TabLayoutViewPagerを組み合わせて使用​​しており、タブのカスタム表示を設定しました。タブが選択されている場合と選択されていない場合(カスタムビューは、選択/非選択のタブによって変更されます)、すべてが期待どおりに機能しています。
問題は最初に起動され、onTabSelectedメソッドは呼び出されません。ここ
は私の活動です:Android-onTabSelectedは初めてcustomViewで呼び出されません

setupViewPager(viewPager);  
tabLayout.setupWithViewPager(viewPager);  

for (int i = 0; i < tabLayout.getTabCount(); i++) { 
    tabLayout.getTabAt(i).setCustomView(getViewAt(i)); 
} 

tabLayout.addOnTabSelectedListener(this);  

これはsetupViewPagerやその他の方法である:タブ
https://i.stack.imgur.com/Scm9P.png

を介して第1のタブをナビゲートするときに最後にここに

private void setupViewPager(ViewPager viewPager) { 
    MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getChildFragmentManager(), getContext(), startDate, endDate); 
    viewPager.setAdapter(adapter); 
}  

private View getViewAt(int i){ 
    final Date currentDate = CalendarUtility.addDay(startDate, i); 
    View v = LayoutInflater.from(getContext()).inflate(R.layout.layout_custom_tab, null); 
    TextView day = (TextView) v.findViewById(R.id.day); 
    TextView num = (TextView) v.findViewById(R.id.num); 
    day.setText(CalendarUtility.getDayOfWeek(currentDate)); 
    num.setText(CalendarUtility.getDayOfMonth(currentDate)); 
    return v; 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    Toast.makeText(getContext(), "Tab #"+tab.getPosition(), Toast.LENGTH_LONG).show(); 
    TextView num = (TextView)tab.getCustomView().findViewById(R.id.num); 
    num.getBackground().setColorFilter(textDarkColor, PorterDuff.Mode.SRC_IN); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 
    TextView num = (TextView)tab.getCustomView().findViewById(R.id.num); 
    num.getBackground().setColorFilter(pinkDarkColor, PorterDuff.Mode.SRC_IN); 
} 

は動作です起動、タブは選択されていない
https://i.stack.imgur.com/a6Xgd.png

誰か助けてもらえますか?

答えて

0

アダプタクラスでは、2つの方法を作成します。 onTabSelectedで今

public void setOnSelectedView(TabLayout tabLayout, int position) { 
    TabLayout.Tab tab = tabLayout.getTabAt(position); 
    if (tab != null) { 
     View selected = tab.getCustomView(); 
     TextView num = (TextView)selected.findViewById(R.id.num); 
num.getBackground().setColorFilter(textDarkColor, PorterDuff.Mode.SRC_IN); 
     tab.select(); 
    } 
} 

public void setunSelectedView(TabLayout tabLayout, int position) { 
    TabLayout.Tab tab = tabLayout.getTabAt(position); 
    if (tab != null) { 
     View selected = tab.getCustomView(); 
     TextView num = (TextView)selected.findViewById(R.id.num); 
num.getBackground().setColorFilter(pinkDarkColor, PorterDuff.Mode.SRC_IN); 
     tab.select(); 
    } 
} 

onTabUnselected方法は、これらのメソッドを呼び出します。

そして、あなたはonCreate()メソッド呼び出しで、最初の選択したタブを起動する場合

setOnSelectedView(0,tabLayout); 

注:もう一つの方法は、ちょうどそれが最初のソリューションは、同じように動作し

if(i==0){ 
    num.getBackground().setColorFilter(textDarkColor, PorterDuff.Mode.SRC_IN); 
    }else{ 
    num.getBackground().setColorFilter(pinkDarkColor, PorterDuff.Mode.SRC_IN); 
    } 
+0

位置づけるチェックgetViewAt()方法であります魅力、そしてもちろん2番目の@Piyush – Leonald

+0

@レオナルド大! – Piyush

0

onTabSelectedは、タブの選択に変更があった場合にのみ呼び出されます。あなたが第2のタブにいて、第1のタブを選択したように。それで、あなたのビューを変更する代わりに。現在選択されている位置を取得するFragmentStatePagerAdapter getItemメソッドで追加できます。

関連する問題