gpt4 book ai didi

android - 带有 TabLayout 的无限 ViewPager

转载 作者:搜寻专家 更新时间:2023-11-01 07:47:49 25 4
gpt4 key购买 nike

我已经在原位实现了一个无限的 ViewPager https://github.com/JoachimR/AnyDayViewPager .但是,我不想使用 PagerTabStrip,而是使用带有 TabLayout 的 CoordinatorLayout。但是当使用 viewpager 设置 TabLayout 时,(我假设是因为存在“无限数量的 ViewPager fragment ”)应用程序卡住了。

我该如何解决这个问题?

代码如下(我没有更改的其他文件可以在 JoachimR/AnyDayViewPager 找到,例如 FragmentContent.javaCachingFragmentStatePagerAdapter.javaTimeUtils.java 等)

MainActivity.java

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.ViewPager;
import android.support.design.widget.TabLayout;
import android.os.Bundle;

import java.util.Calendar;

public class MainActivity extends FragmentActivity {

private static Context mContext;

private CachingFragmentStatePagerAdapter adapterViewPager;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mContext = this;

ViewPager vpPager = (ViewPager) findViewById(R.id.vpPager);
adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
vpPager.setAdapter(adapterViewPager);

// set pager to current date
vpPager.setCurrentItem(TimeUtils.getPositionForDay(Calendar.getInstance()));

/** THIS IS WHERE THE ISSUES ARISE **/
TabLayout tabLayoutDiary = (TabLayout) findViewById(R.id.diary_tabs);
tabLayoutDiary.setupWithViewPager(vpPager);

}

public static class MyPagerAdapter extends CachingFragmentStatePagerAdapter {

private Calendar cal;

public MyPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}

@Override
public int getCount() {
return TimeUtils.DAYS_OF_TIME;
}

@Override
public Fragment getItem(int position) {
long timeForPosition = TimeUtils.getDayForPosition(position).getTimeInMillis();
return FragmentContent.newInstance(timeForPosition);
}

@Override
public CharSequence getPageTitle(int position) {
Calendar cal = TimeUtils.getDayForPosition(position);
return TimeUtils.getFormattedDate(mContext, cal.getTimeInMillis());
}


}

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:fab="http://schemas.android.com/tools">

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.TabLayout
android:id="@+id/diary_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/vpPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

最佳答案

可能是由于这个错误:https://code.google.com/p/android/issues/detail?id=180027

TabLayout 为 ViewPager 中的每个页面创建一个 TextView 选项卡,而不是动态创建和回收 TextView。如您所见,如果您试图伪造一个无限的 ViewPager,这只会爆炸。

不幸的是,目前没有解决办法。您可以尝试使用 https://github.com/nshmura/RecyclerTabLayout链接在错误上,但我自己没有使用过。

关于android - 带有 TabLayout 的无限 ViewPager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com