【发布时间】:2015-03-27 19:43:32
【问题描述】:
我有一个包含 3 个片段的活动 A。每个片段相互替换,因此在给定时间只有 1 个可见。
HomeFragment 在 2 个卡片视图中包含 2 个文本视图。每个卡片视图代表一个来自 Fragment1 和 Fragment2 的文本值。当我点击说 Card1 时,我到达 Fragment1。
Fragment1 有一些卡片视图,当我选择其中任何一个时,我会导航回 HomeFragment 并根据我在 Fragment1 中的选择更新卡片视图文本。这是 switch 语句,具体取决于用户选择的卡片,我将其放入捆绑包中并将其传递给 HomeFragment。
switch (v.getId()) {
case R.id.card_view0:
Fragment1Bundle.putString("Test", "Testing");
bundle.putBundle("Fragment1Bundle", Fragment1Bundle);
fragmentTransaction.setCustomAnimations(R.anim.slideup, R.anim.slidedown, R.anim.slideup, R.anim.slidedown);
fragmentTransaction.replace(R.id.content_frame, fragment);
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
break;
Fragment2 与 Fragment 1 具有相同的行为。
switch (v.getId()) {
case R.id.card_view0:
Fragment2Bundle.putString("Test2", "Tetsing");
bundle.putBundle("Fragment2Bundle", Fragment2Bundle);
fragmentTransaction.setCustomAnimations(R.anim.slideup, R.anim.slidedown, R.anim.slideup, R.anim.slidedown);
fragmentTransaction.replace(R.id.content_frame, fragment);
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
break;
我的挑战是我正在使用捆绑包在片段之间传递数据,我的主片段使用来自片段 1 的数据进行更新,但是当我转到片段 2 并在选择返回主片段后,我的片段 1 数据是设置为默认值。这就是我在 Home Fragments onCreateView() 中所做的
try {
bundle1 = getArguments().getBundle("Fragment1Bundle");
bundle2 = getArguments().getBundle("Fragment2Bundle");
tv.setText(bundle1.getString("Test") == null ? null : bundle1.getString("Test"));
tv2.setText(bundle2.getString("Test2") == null ? nul : bundle2.getString("Test2"));
} catch (NullPointerException e) {
Log.d(TAG, e.printStackTrace());
}
我知道我在 fragment1 和 fragment2 的片段事务中创建了一个新的 Homefragment,我怎样才能只保留 1 个 Home 片段实例。
【问题讨论】:
-
我想我会简单地创建一个单独的单例类来保存共享值,然后 fragment1 通过执行类似
TextHolder.getInstance().setTest1("Test1")的操作来写入,类似于 fragment2TextHolder.getInstance().setTest2("Test2")。最后在您的主片段的onResume中读取TextHolder.getInstance().getTest1()和TextHolder.getInstance().getTest2()的值。或者,您可以使用 EventBus 之类的东西来保留一个公共对象,但结果最终会大致相同。 -
@Noble6,你目前进展如何?我会做与你的问题类似的事情。
-
@TheOriginalAndroid,我现在正在使用单例模型类并对其进行读写数据。如果您需要任何帮助,请告诉我。
-
@Noble6,我可以理解你使用单例静态(我假设)的技术是如何工作的,对你有好处!但是,当用户按 Home 键或切换到另一个应用程序(不按 Back 键)时,可能会出现问题。