Tablayout与ViewPager的联动指示器不显示问题

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

    }
}


猜你喜欢

转载自blog.csdn.net/u014379448/article/details/52708397