我正在将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没有显示我已经添加的自定义视图。它只显示默认标题..这个相同的代码工作 如果我使用 编译&#34; com.android.support:design:23.1.1&#34;
但如果我将此更改为较新版本,这不起作用请任何人帮助我尝试这个但是havnt得到ans或任何其他替代lib或方法,我可以在标签视图中添加customView
答案 0 :(得分:2)
这个可能是个错误!我仍然面对最新的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
答案 1 :(得分:1)
我想我找到了一种解决方案:听取布局更改,如果customView为null,请再次设置:
(1,)
答案 2 :(得分:1)
为了在创建或重新创建选项卡时设置自定义视图,我们需要在发生这种情况时进行回调
在这种情况下,类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"
... />
答案 3 :(得分:0)
我遇到了同样的问题,我通过在设置时设置TabLayout.setupWithViewPager(viewPager,false)
来解决此问题(我目前正在使用版本24.1.0)。
更详细,老实说,我只看一下TabLayout类,并意识到删除标签的调用来自PagerAdapterObserver。当autoRefresh
为真时设置的那个是女性TabLayout.setupWithViewPager(ViewPager viewPager)
的默认值。
然后快速查看文档说:
如果autoRefresh为true,则会触发PagerAdapter中的任何更改 这种布局可以从适配器的标题中重新填充。
因此,应该更新文档,说明autoRefresh
对于自定义视图应该为false,或者他们无法处理自定义视图。
答案 4 :(得分:0)
标签的高度固定为48dp。当您只有文本时,材料指南使用48dp,但如果您想要图标,则高度为72dp(选项卡指南)。因此,为了解决这个问题,我将TabLayout子类化并以这种方式覆盖onMeasure方法:
@Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){ super.onMeasure(widthMeasureSpec,heightMeasureSpec); super.setMeasuredDimension(widthMeasureSpec, MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(heightMeasureSpec),MeasureSpec.EXACTLY)); }
您还需要在xml中设置选项卡的高度。
机器人:layout_height =&#34; 72dp&#34;
这样它就能正常工作。