在名为locate_map
的片段上,我声明了一个字符串数组并将其转换为String ArrayList。我希望将ArrayList传递给另一个名为locate_updatedstatus
的片段。我的locate_map
片段上有一个ID为to_update_status
的按钮,它会从locate_map
切换到locate_updatedstatus
,同时会传递我的ArrayList并将其显示为列表视图我的locate_updatedstatus
建筑没有错误。但是,每当我导航到我的locate_updatedstatus
应用程序崩溃时。
主要活动。这是我在片段之间切换的方式。我正在使用导航抽屉活动与容器片段
public void onSelectFragment(View v){
Fragment newFragment;
if(v == findViewById(R.id.to_update_status)){
newFragment = new locate_updatedstatus();
}
else{
newFragment = new locate_login();
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
locate_map片段
public class locate_map extends Fragment implements Serializable{
public locate_map () {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_locate_map, container, false);
String[] updatedArr = {"display this", "also this"};
List<String> stringList = new ArrayList<String>(Arrays.asList(updatedArr));
Bundle bundle = new Bundle();
bundle.putSerializable("key", (Serializable) stringList);
return rootView;
}
}
locate_map xml按钮
<Button
android:id="@+id/to_update_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/check_images"
android:layout_marginTop="15dp"
android:text="Update Status"
android:width="340dp"
android:height="70dp"
android:onClick="onSelectFragment"
/>
locate_updatedstatus片段
public class locate_updatedstatus extends Fragment implements Serializable {
public locate_updatedstatus() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_locate_updatedstatus, container, false);
ArrayList<String> stringList = (ArrayList<String>)getArguments().getSerializable("key");
ListView listSource = (ListView) rootView.findViewById(R.id.updates);
ArrayAdapter<String> listViewAdapter = new ArrayAdapter<String>(
getActivity(),
android.R.layout.simple_list_item_1,
stringList
);
listSource.setAdapter(listViewAdapter);
return rootView; // Inflate the layout for this fragment
}
}
locate_updatedstatus xml listview
<ListView
android:layout_width="match_parent"
android:layout_height="350dp"
android:layout_marginTop="60dp"
android:id="@+id/updates"
android:listSelector="@android:color/transparent"
/>
如果答案详细,我将不胜感激。我是android编程的初学者,请耐心等待。
logcat错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.Serializable android.os.Bundle.getSerializable(java.lang.String)' on a null object reference at com.example.makati.sidebar.locate_updatedstatus.onCreateView(locate_updatedstatus.java:31)
答案 0 :(得分:0)
您需要的只是bundle.putStringArray
String[] updatedArr = {"display this", "also this"};
bundle.putStringArray(KEY, updatedArr)
和
bundle.getStringArray(KEY)
在您的代码中,您没有将Bundle
作为参数添加到Fragment
请使用link修复类构造函数
答案 1 :(得分:0)
下面的代码只是创建捆绑包并向其添加arraylist。但没有具体说明它将被使用的地方。
List<String> stringList = new ArrayList<String>(Arrays.asList(updatedArr));
Bundle bundle = new Bundle();
bundle.putSerializable("key", (Serializable) stringList);
解决方案:希望第一个locate_login和locate_updatedstatus片段按顺序创建。
locate_login片段:尝试放置内容活动意图
List<String> stringList = new ArrayList<String>(Arrays.asList(updatedArr));
Bundle bundle = new Bundle();
bundle.putSerializable("key", (Serializable) stringList);
getActivity().getIntent().putExtras("key",bundle);
locate_upadtestatus片段:从活动意图中获取数据
ArrayList<String> stringList = (ArrayList<String>)getActivity().getIntent().getExtras("key");