gpt4 book ai didi

android - getArgument 在 fragment 第二次创建 View 时获取 nullexception

转载 作者:行者123 更新时间:2023-11-29 01:24:52 24 4
gpt4 key购买 nike

默认情况下, ListView fragment 将在我的 Activity 中显示为第一个

这是我的 Activity :

public class SecondActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
FragmentManager manager = getFragmentManager();
FragmentTransaction tran = manager.beginTransaction();
ListViewFragment fr = new ListViewFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("Object", getIntent().getParcelableExtra("ObjectFromCategory"));
fr.setArguments(bundle);
tran.addToBackStack(null);
tran.replace(R.id.places_fragment_cointainer, fr, "ListView");
tran.commit();
//handleFragmentCycle();
}

然后在 ListviewFragment 中我得到参数:

public class ListViewFragment extends Fragment implements OnClickListener {
private TextView mTxtMapView;
private Category mObject;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_places_listview, container,false);
mTxtMapView = (TextView)v.findViewById(R.id.txt_mapview);
mObject = getArguments().getParcelable("Object");
Toast.makeText(getActivity(), mObject.getText(), Toast.LENGTH_LONG).show();
mTxtMapView.setOnClickListener(this);
return v;
}

这是我的 MapViewFragment:

public class MapViewFragment extends Fragment implements OnClickListener {

TextView txtListView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.fragment_places_mapview, container, false);
FragmentManager fm = getChildFragmentManager();
MapFragment supportMapFragment = MapFragment.newInstance();
fm.beginTransaction().replace(R.id.mapwhere, supportMapFragment).commit();
txtListView = (TextView) v.findViewById(R.id.txt_listview);
txtListView.setOnClickListener(this);
return v;

}

第一次创建ListViewFragment时,我可以成功获取参数,但是当我更改为MapViewFragment然后再更改回ListViewFragment时,我得到的是null。我想出了一个解决方案,我应该在 bundle 中传递一个 int 值来检测 ListViewFragment 是从 Activity 还是 MapViewFragment 创建的。但我认为这不是一个好的解决方案,因为我仍然想获得类别对象,所以我想听听是否有人对这种情况有更好的解决方案。谢谢你!

最佳答案

您可以使用 gjson 将您的对象存储到 SharePreference在你的 Activity 中。
然后在 Fragment 中,您从 SharePreference 检索您的对象。之后,您将永远不会在 Fragment

中获得 null 对象

===
这是从 SharePreference
保存和检索对象的方法创建

SharedPreferences  mPrefs = getPreferences(MODE_PRIVATE);//Creating shared preference

用于保存对象

Editor prefsEditor = mPrefs.edit();
Gson gson = new Gson();
String json = gson.toJson(myObject); // myObject - instance of MyObject
prefsEditor.putString("Object", json);
prefsEditor.commit();

用于检索对象

Gson gson = new Gson();
String json = mPrefs.getString("Object", "");
MyObject obj = gson.fromJson(json, MyObject.class);

关于android - getArgument 在 fragment 第二次创建 View 时获取 nullexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com