gpt4 book ai didi

Android - Fragments 和 Tabs 通信

转载 作者:行者123 更新时间:2023-11-30 05:10:14 26 4
gpt4 key购买 nike

我是 Android 的新手。

这是我的场景:我有一个包含 3 个选项卡的简单应用。在每个选项卡中,我想使用一个或多个 fragment 。情况是这样的:

  1. 选项卡 1:
    • fragment A
  2. 选项卡 2:
    • fragment B
    • fragment C
    • fragment D
  3. 选项卡 3:
    • fragment E
    • fragment F

在“选项卡 1”中我没有问题。一切都很好。当我需要移动到“Tab 2”和“Tab 3”时会出现问题。

在选项卡 2 中,我必须将一些参数从“fragment B”传播到“fragment C”以及从“fragment C”传播到“fragment D”。

然后当用户点击“Fragment D”中的某个按钮时,我必须传递到“Tab 3”并且我必须将一些参数从“Fragment D”传播到“Fragment E”。

在我用于处理 Tab 的主要 Activity 中,我使用了这些组件:

  • android.support.design.widget.TabLayout
  • android.support.v4.view.ViewPager
  • android.support.v4.app.FragmentStatePagerAdapter(我创建了一个自定义的类(class))
  • android.support.design.widget.TabLayout.OnTabSelectedListener(我创建了一个自定义类)

我非常简单的 FragmentStatePagerAdapter 扩展是:

public class MyOwnPageAdapter extends FragmentStatePagerAdapter {
private int numeroTab;
public MyOwnPageAdapter(FragmentManager fm, int numeroTab) {
super(fm);
this.numeroTab = numeroTab;
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0:
return new FragmentA() ;
case 1:
return new FragmentB() ;
case 2:
return new FragmentC() ;
default:
return null;
}
}
@Override
public int getCount() {
return numeroTab;
}
}

我非常简单的 TabLayout.OnTabSelectedListener 扩展是:

public class TabSelectedListener implements TabLayout.OnTabSelectedListener {
private ViewPager viewPager;
public TabSelectedListener(ViewPager viewPager){

this.viewPager = viewPager;
}
@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) {

}
}

我可以在选项卡 2 中的选项卡内切换 fragment ,我可以从 fragment B 切换到 fragment C,依此类推。我在 fragment 之间传递参数时遇到问题,尤其是从选项卡 2 中的 fragment D 到选项卡 3 中的 fragment E

在我使用 android.support.v4.app.FragmentManager 的 fragment 实现中,我可以通过执行以下操作来添加和删除 View (例如 fragment ):

mFragmentManager.beginTransaction().add(rootView.getId(),mListaEdificiFragment, "BUILDS").addToBackStack(null).commit();

问题是参数传播,因为 FragmentStatePagerAdapter 似乎缓存了 View ,所以 fragment 构造函数被调用了,但是 onCreateonCreateView 不再被调用,所以我无法处理传播的参数。

有什么解决办法吗?还是我的导航模式完全错误?我想避免在一个隐藏某些部分的“大 View ”中折叠 fragment B、 fragment C 和 fragment D( fragment E 和 fragment F 相同)

欢迎大家提出建议

安杰洛

最佳答案

将变量值从一个 fragment 传输到另一个 fragment 的一个简单解决方案是共享首选项(也可用于将值从一个 Activity 传输到另一个 Activity )。共享首选项将根据变量保存数据,这些变量将在 Android 应用程序的所有 Activity 和 fragment 中持续存在。

现在,在您的情况下,假设您要将值 name = angelo 从 fragment A 传输到 fragment B。在 fragment A 中,编写以下代码:

 Button updateName = findViewById(R.id.btnupdateTeamName);
updateTeamName .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString("name", "angelo");
editor.commit();
}
});

执行时,上述代码将在共享首选项中使用 angelo 更新值 name。这将在您的整个应用程序中可用。

有关共享偏好的更多信息,请查看此官方 document .

关于Android - Fragments 和 Tabs 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53864625/

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