当前位置: 首页 > 知识库问答 >
问题:

导航抽屉中碎片之间的通信

常甫
2023-03-14

我试图通过点击按钮将数据从导航抽屉的片段A发送到片段B。我尝试了捆绑和意图,但两者都不起作用。

在片段A中,我有editText和按钮,当我单击时,数据被传递到另一个片段。

在片段B中有一个textView,editText数据将在其中显示,但我在导航抽屉中找不到在片段之间通信的方法

共有3个答案

夹谷浩宕
2023-03-14

1-创建应用程序类

public class MyApplication extends Application {
  @Override
  public void onCreate() {
    super.onCreate();
    mInstance = this;
  }
 private static MyApplication mInstance;
  public static synchronized MyApplication getInstance() {
    return mInstance;
  }
  String mytext;

public String getMytext() {
    return mytext;
}

public void setMytext(String mytext) {
    this.mytext = mytext;
}
}

2-manifast中的应用程序名称标签

<application
    android:name=".MyApplication"
 .......

3-来自第一个片段

MyApplication.getInstance().setMytext("your text here");

4-来自其他片段

String text=MyApplication.getInstance().getMytext();
解飞语
2023-03-14

让您的Active进行通信。

在您的主活动中取一个公共静态变量,从中控制导航抽屉的片段。单击片段A中的按钮时,将编辑文本中的值存储到主活动的公共静态变量中。然后,当加载碎片B时,检查公共静态值是否为空。如果不是null,则将该变量的值放置到所需位置。

这不是在片段之间传递值的优雅方式,但在您的情况下,它会很好地工作。

如果您正在寻找如何将值从一个片段传递到另一个片段,请尝试以下操作。

// To pass some value from FragmentA
FragmentB mFragmentB = new FragmentB();
Bundle args = new Bundle();
args.putString("VALUE", value);
mFragmentB.setArguments(args);

然后从片段B中使用代码获得传递的值。

Bundle args = getArguments();
int value = args.getString("VALUE");
宦正诚
2023-03-14

从第一个片段启动片段时

Bundle bundle = new Bundle();
bundle.putString("key", YOUR_EDITVIEW_TEXT);

Fragment fragment = new SECONDFragment();

if (arguments != null) {
    fragment.setArguments(arguments);
}

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.container, fragment);
ft.addToBackStack("");
ft.commit();

并在秒片段

private String mData;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {
        mData = getArguments().getString("key");
    }


}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.YourLayout, container, false);

    TextView text = (TextView) rootView.findViewById(R.id.yourTextView);
    text.setText(mData);
    return rootView;
}
 类似资料:
  • 我有一个关于片段管理的问题。 我已经编写了一个基于碎片的抽屉活动。每次点击菜单项后,您都会看到一个空片段。 我如何实现这一点?

  • 在阅读了关于片段和活动的文档和讨论后,我想我已经把情况弄清楚了。 活动应该为用户提供一个屏幕,用户可以在其中工作。导航到其他屏幕通常会破坏活动。 片段应该提供很少或单个功能组件,可以在活动中再次使用。片段的内容应该相互独立地工作,因此可以在多个活动中重用。 虽然这一切似乎都有道理,但有一件事我无法理解: 如果您创建一个新的Android应用程序,并选择创建Android导航抽屉应用程序的选项,为什

  • 我已经在我的项目中添加了一个导航抽屉活动,并尝试将项目作为片段添加。这就是我在主要活动中所做的。 默认片段是Home,它工作正常,正如预期的那样,但其他片段与Home片段重叠。(HomeFragment是唯一工作正常的)。我在每个片段类中都做过这样的事情: 我看不出错误在哪里。一切看起来都很好,但所有其他片段都显示在HomeFragment上。

  • 我开始创建一个应用程序,它使用一个活动(导航抽屉)和许多片段。但我无法使用工具栏上的“后退”按钮从片段中导航回来。硬件后退按钮工作正常。我知道我需要覆盖选项ItemSelected,捕捉android。R、 id.home,检查后堆栈中是否有内容,然后弹出它。在更改片段后,“burger”按钮变为“back arrow”,但当我单击它时,选项ItemSelected将打开NavigationDra

  • 当我在导航抽屉中的不同片段之间切换时,我试图保存导航抽屉片段上的状态。例如:我从片段A开始触发一些事件,然后切换到片段B。然后我想在从片段B切换回片段A时看到片段A的相同状态。 我尝试使用onSavedInstanceState(Bundle savedInstanceState),但只有当片段生命周期中的方向发生变化时才会调用它。每当我切换到新片段时,都会创建一个新片段,我不知道如何从片段中保存

  • 所以我有一个活动,其中有一个片段,片段有一个导航抽屉和页面的内容。当我打开抽屉并单击一个项目时,片段被替换为一个新片段。当我按下后退按钮时,我在片段管理器上调用popBackStack,它返回到第一个片段,但导航抽屉是打开的。 有几件事要注意:当按下抽屉中的一个项目时,我在抽屉布局上调用关闭抽屉,当片段被替换时抽屉关闭。如果我按下操作栏中的UP按钮,我可以用新的主片段替换片段容器,但我更喜欢能够将