在Tablayout与ViewPager的联动中经常会出现指示器中不显示内容的问题,其实这个问题是由于Tablayout调用 setupWithViewPager(viewpager)的时候会在viewpager!=null的时候setPagerAdapter(adapter, autoRefresh);在该方法中会最后调用populateFromPagerAdapter();在该方法中系统做了removeAllTabs()的操作,所以会指示器中的内容会全部消失。但是我们可以通过重写ViewPager的adapter的getPageTitle来设置指示器的内容,
//mainactivity
import android.support.design.widget.TabLayout; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TabLayout tabLayout = (TabLayout) findViewById(R.id.tablayout); ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
//设置tablayout与ViewPager联动
tabLayout.setupWithViewPager(viewPager);
ArrayList<String> strings =new ArrayList<>(); for (int i = 0; i < 10; i++) { strings.add("第"+i+"个"); } viewPager.setAdapter(new MyPagerAdapter(this,strings)); } }
//pageradapter
import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; public class MyPagerAdapter extends PagerAdapter { ArrayList<String> strings =new ArrayList<>(); Context context; public MyPagerAdapter(Context context, ArrayList<String> strings) { this.context=context; this.strings=strings; } //viewpager 的总个数 @Override public int getCount() { return strings.size(); }
//通过该方法设置指示器的内容
@Override public CharSequence getPageTitle(int position) { return strings.get(position); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { TextView textView =new TextView(context); textView.setText(strings.get(position)); container.addView(textView); return textView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }