一个具有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;
}
}
答案 0 :(得分:0)
如果我对您的理解正确,那么您将执行第三个片段->活动,该活动应该更新启动它的片段。对于我来说,在这种情况下,最干净的解决方案是从打开的活动调用startActivityForResult
方法调用片段的活动宿主,并处理覆盖的onActivityResult
方法中需要的所有内容。而不是仅仅称呼您的片段的updateTextView()
或类似名称。
另一方面,您可以使用this library在组件之间发送消息,但是您应谨慎使用并考虑与组件生命周期相关的极端情况。
因此,请根据需要选择解决方案:)
答案 1 :(得分:0)
如果发现使用startActivityForResult
不足以使用EventBus
或使用SharedPreferences
,则可以使用Fragment/Activity
和Activity
生命周期来克服这一问题。
因此,一旦您开始新的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