我的代码在这个项目中是巨大的,所以我会尽力总结我所知道的最新动态。我已经浏览了论坛,并尝试了多条路线来解决这个问题。我希望这是显而易见的,我错过了。
我使用了android studio在新项目向导中创建的tablayout
项目,4个选项卡(使每个选项卡都有自己的片段)。
在片段1上,我onclicklistener
尝试更改片段2上numberpicker
的值。我的问题是findviewbyid
上的numberpicker
一直在回来空值。我已经为findviewbyid
尝试了多种格式,并且它一直返回null。
基本上我正在尝试访问另一个片段上的对象而findviewbyid
没有找到该对象。
otherpck = (NumberPicker) getActivity().findViewById(R.id.pckOther);
otherpck.setValue(5);
如果我在onclicklistener
中为片段1上的按钮运行上述代码,试图在片段2上找到pckOther
,则会将otherpck
设置为null。
所有碎片都已膨胀。我可以单击所有选项卡,然后单击fragment1上的按钮,仍然可以为空。
提前感谢您的帮助。
答案 0 :(得分:0)
您不应该直接从另一个活动/片段访问片段的视图,因为android管理您的活动并按需暂停/停止它们。所以想象你在活动B中你去吃午饭然后你回来30分钟后你的活动B将被恢复但是很有可能机器人杀死你的活动A所以当你试图访问它的视图时它将返回null。
相反,您可以使用其中一个选项。
使用Bundle。 http://developer.android.com/reference/android/os/Bundle.html
1)使用意图中的Bundle:
Intent mIntent = new Intent(this, Example.class);
Bundle extras = mIntent.getExtras();
extras.putString(key, value);
2)创建一个新的Bundle
Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.extras.putString(key, value);
mIntent.putExtras(mBundle);
3)使用Intent的putExtra()快捷方法
Intent mIntent = new Intent(this, Example.class);
mIntent.putExtra(key, value);
然后,在启动的Activity中,您将通过以下方式阅读它们:
String value = getIntent().getExtras().getString(key);
这是正确的方法。另一种方式是SharedPreferences。 http://developer.android.com/training/basics/data-storage/shared-preferences.html
答案 1 :(得分:0)
如果没有创建并附加到活动,则有一些问题您无法要求查看。如您所说,您正在使用片段,如果该片段尚未附加到您的活动,则您的活动无法访问该视图。
答案 2 :(得分:0)
替换这一行:
otherpck = (NumberPicker) getActivity().findViewById(R.id.pckOther);
这一行:
otherpck = (NumberPicker) findViewById(R.id.pckOther);