gpt4 book ai didi

Android ViewPager 加载不正确的 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:20 26 4
gpt4 key购买 nike

因此,我试图在我的主要 Activity 中使用主导航栏下方的选项卡栏和布局。

我似乎无法让 ViewPager/TabLayout(不确定是哪个问题的原因,这是新问题)加载正确的 fragment 。我已经阅读了大量文档并检查了超过 1 个教程以查看我是否正确地执行了此操作并且看起来我正在做同样的事情...

我的 TabLayoutOnTabSelectedListener 正在正确地看到选项卡更改,并且在 OnTabSelected 中我正在调用 viewPager.setCurrentItem(tab. getPosition()) 尝试设置我的 viewpagers 项目,但它仍然无法正常工作。第一次加载时,它加载第一个和第二个选项卡(我可以通过 fragment onCreate 方法发送的 API 请求看到),当我单击其他选项卡时,它始终加载错误的 fragment ,有时甚至根本不加载一个!

不确定这是否相关,但我在切换标签时收到此警告:

03-03 16:24:22.940 16967-16967/com.sampleapp.app W/FragmentManager: moveToState: BlankFragment3{efddbec#2 id=0x7f0c007b android:switcher:2131492987:2} 的 fragment 状态未更新排队;预期状态 3 找到 2

我正在使用构建工具版本 23.0.2 和以下依赖项:

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'

这是我的主导航栏布局代码:

<?xml version="1.0" encoding="utf-8"?>

<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar2"
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabGravity="fill"/>

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

<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_input_add" />

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

根据不止一个教程,这是我用于我的适配器的代码

public class TabsAdapter extends FragmentPagerAdapter{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public TabsAdapter(FragmentManager fm) {
super(fm);
}

public void addFrag(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}

@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}

@Override
public int getCount() {
return mFragmentList.size();
}

@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}

下面是我如何设置 viewpager 和 tablayout

MainActivity 的 onCreate:

    ViewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(mViewPager); // Method defined below

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(mViewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
mViewPager.setCurrentItem(tab.getPosition());
Log.w("Tab Selection", String.valueOf(tab.getPosition()));
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
});

最后,我的 setupViewPager 方法:

private void setupViewPager(ViewPager viewPager) {
TabsAdapter adapter = new TabsAdapter(getSupportFragmentManager());
adapter.addFrag(new BlankFragment1(), "One");
adapter.addFrag(new BlankFragment2(), "Two");
adapter.addFrag(new BlankFragment3(), "Three");
viewPager.setAdapter(adapter);
}

如果有人发现任何问题,请告诉我,我这辈子都无法让这些该死的标签加载正确的 fragment 。

提前致谢!

最佳答案

试试这个代码伙伴 :D

ViewPager 适配器

public class PageAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;

public PageAdapter(FragmentManager fm,int numTabs) {
super(fm);
this.mNumOfTabs = numTabs;
}

@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
RemindsTab remindsTab = new RemindsTab();
return remindsTab;
case 1:
TasksTab tasksTab = new TasksTab();
return tasksTab;
case 2:
QuicklyNotesTab quicklyNotesTab = new QuicklyNotesTab();
return quicklyNotesTab;
default:
return null;
}
}

@Override
public int getCount() {
return mNumOfTabs;
}
}

以及我在 MainActivity 中用于这些选项卡的代码:

 final TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Recordatorios"));
tabLayout.addTab(tabLayout.newTab().setText("Tareas"));
tabLayout.addTab(tabLayout.newTab().setText("Notas Rapidas"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final PagerAdapter adapter = new PageAdapter(getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(TabLayout.Tab tab) {

}

@Override
public void onTabReselected(TabLayout.Tab tab) {

}
});

希望你能解决你的问题:)

关于Android ViewPager 加载不正确的 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783098/

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