具有自定义视图的Tablayout在23.4.0设计库中损坏
我将tablayout设置为我的viewpager。 但是当我使用notifyDataSetChanged然后它删除我的自定义视图并显示默认标题视图我的代码
ViewPager viewPager = findView(R.id.view_pager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), getResources(), getFragments());
viewPager.setAdapter(adapter);
tabs.setupWithViewPager(viewPager);
for (int i = 0; i < tabs.getTabCount(); i++) {
TabLayout.Tab tab = tabs.getTabAt(i);
tab.setCustomView(getTabView(i));
}
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
adapter.notifyDataSetChanged();
}
});
public View getTabView(int position) {
View v = LayoutInflater.from(this).inflate(R.layout.pager_tab, null);
RelativeLayout linearLayout = (RelativeLayout) v.findViewById(R.id.view);
return v;
}
所以它的工作正常,但是当我调用adapter.notifyDataSetChanged(); 然后我的tablayout不显示customview,我已经添加prev。 它只显示默认标题..这个相同的代码工作,如果我使用编译“com.android.support:design:23.1.1”
但如果我改变这个更新的版本,这是行不通的,请任何人可以帮助我,我试着这个,但havnt得到ans或任何其他替代库或方法,我可以在标签视图中添加customView
这可能是一个错误! 而且我仍然在最新的25.2.0支持SDK上面对这个问题。
默认情况下,当viewpager更新时, tablayout被分配自动刷新 。 这可以通过关闭下面的代码中的自动刷新来解决(解决方法)
viewPager = (ViewPager) findViewById(R.id.viewpager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
setupViewPager(viewPager);
tabLayout.setupWithViewPager(viewPager,false); // Do like this to disable auto refresh of tabs
我想我找到了一种解决方案:听取布局更改,如果customView为null,请重新设置它:
viewPager.addOnLayoutChangeListener(new ViewPager.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
for (int i = 0; i < tabLayout.getTabCount(); i++) {
if (tabLayout.getTabAt(i).getCustomView() == null) {
tabLayout.getTabAt(i).setCustomView(tabs[i]);
}
}
}
}
为了在选项卡创建或重新创建时设置自定义视图,我们需要在发生这种情况时进行回调。
在这种情况下,类TabLayout
不允许调用监听器,但它暴露了方法TabLayout.newTab()
。
创建一个从TabLayout
扩展并覆盖newTab()
,如下所示。
public class TabLayoutWithCustomTabView extends TabLayout {
public TabLayoutWithCustomTabView(Context context) {
super(context);
}
public TabLayoutWithCustomTabView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TabLayoutWithCustomTabView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@NonNull
@Override
public Tab newTab() {
final Tab tab = super.newTab();
tab.setCustomView(inflate(getContext(), R.layout.custom_layout, null));
return tab;
}
}
在你的布局中,使用TabLayout
的新类。
<com.example.TabLayoutWithCustomTabView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
... />
链接地址: http://www.djcxy.com/p/91817.html