如何将数据从活动传递到导航抽屉android

时间:2019-09-05 21:26:24

标签: java android

一个具有3个Fragments的导航抽屉,第三个Fragment具有带on Click侦听器的TextView。单击后,将在顶部打开一个布局活动,其中包括一个ListView,允许用户选择/单击一个特定的Item,因此稍后在此选定的Item信息上应在第三个片段中的那个TextView上显示。

有什么方法可以传递数据,因为我已经使用了一个类来传递数据,但是TextView不会用发送的数据刷新

这是一种设计模式,可以在Activity和第三个片段之间共享参数

-------------------------- DataHolder类------------------- --------------

 public class DataHolder {

 private static DataHolder dataHolder = null;

private DataHolder() {
   }

  public static DataHolder getInstance() {
 if (dataHolder == null)
     {dataHolder = new DataHolder(); }


 return dataHolder;
 }


 private  String item;

  public String getItem() {
return item;
  }

 public void setItem(String item) {
  this.item = item;
     }

 }

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您将执行第三个片段->活动,该活动应该更新启动它的片段。对于我来说,在这种情况下,最干净的解决方案是从打开的活动调用startActivityForResult方法调用片段的活动宿主,并处理覆盖的onActivityResult方法中需要的所有内容。而不是仅仅称呼您的片段的updateTextView()或类似名称。

另一方面,您可以使用this library在组件之间发送消息,但是您应谨慎使用并考虑与组件生命周期相关的极端情况。

因此,请根据需要选择解决方案:)

答案 1 :(得分:0)

如果发现使用startActivityForResult不足以使用EventBus或使用SharedPreferences,则可以使用Fragment/ActivityActivity生命周期来克服这一问题。

因此,一旦您开始新的Activity,首先onPause将进入Fragments,并且其所有onPause将被放入ListView。当用户单击第二个Activity中的SharedPreferences个项目之一时,您可以将值存储在PreferenceManager.getDefaultSharedPreferences(SecondActivity.this) .edit().putString(key, selectedItemInfoHere).apply(); 内,例如:

override

然后在第一个Activity内部和第三个Fragment方法onResume()内部 @Override public void onResume() { super.onResume(); String value = PreferenceManager.getDefaultSharedPreferences(getContext()) .getString(key, ""); if (value != null && !value.isEmpty()) { //You have selected item value update TextView } } 中进行检查:

TextView

请注意,一旦不需要此值,便需要将其删除,因为每次调用onResume时,它将更新您的PreferenceManager.getDefaultSharedPreferences(getContext()).edit().remove(key); 。要删除价值,只需致电:

lib /def:sqlite3.def