我有一个Android应用程序。其中一个活动有两个片段。
当我的应用程序启动时,它会将数据分配给其活动中的变量。然后在单击按钮时,将打开第二个片段,它将从活动中分配的活动中获取数据。但它返回null。到目前为止我尝试过的是......
我在我的活动类中创建了变量,并像这样从我的片段中分配数据。
((MainActivity)getActivity()).resultObj = gson.fromJson(HomeCardString.toString(), HomeCardResult.class);
并且它完全分配,因为我在这个
的相同片段中使用了这些数据HomeCardListItemAdapter adapter = new HomeCardListItemAdapter(getActivity(),
R.layout.home_cardlist_item, ((MainActivity)getActivity()).resultObj.HomeData.FriendSummary);
哪种方法很完美。
但是当我在点击时打开我的第二个片段时,它只显示我的布局而不执行任何覆盖方法。像oncontentview等,因为这些所有方法都是在活动开始时执行的。但那时我没有将数据分配给我的活动变量。所以我制作了自己的方法,并在显示我的第二个片段之后立即调用它。
showFragment(FRIENDLIST, true);
FriendListActivity asdss = new FriendListActivity(); // this is my second fragment
asdss.populateFriendList();
在第二个片段中,我使用此代码的方法。
public void populateFriendList()
{
FriendList = ((MainActivity)getActivity()).resultObj.HomeData.Friends;
String asd = FriendList.toString();
asd = asd + "asdasda";
}
但是[FriendList =((MainActivity)getActivity())。resultObj.HomeData.Friends;]这一行显示了invocationtargetexception.class文件,其中找不到书面来源。
在logcat中出现此错误。
07-24 12:06:47.204:E / AndroidRuntime(3926):java.lang.NullPointerException
答案 0 :(得分:3)
确定这是您从活动
向片段发送数据的方式(In your Activity)
// You create a bundle
Bundle bundle = new Bundle();
// Add data to your the bundle
bundle.putInt("key", your_data); //e.g. adding integer, you can do similar for other data types
// Pass bundle to the fragment using setArguments()
your_fragment.setArguments(bundle);
(In your Fragment class)
Bundle bundle = getArguments();
Integer your_data = bundle.getInt("key", default_value);
注意:您甚至可以将对象传递给片段。为此,您需要使对象类“Parcelable”并调用bundle.putParcelable("key", your_object);
了解可以传递给片段的数据类型。请问你是否遇到任何问题。