在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); } }