首页 > 解决方案 > 如何使用可序列化从活动获取数据到片段

问题描述

如何检索我们输入到的activity数据fragment?我用这个方法试过这个serializable,但是我在接收我的数据activity并将其应用到fragment

活动类:

Intent intent = new Intent(AddImpianActivity.this, AktifFragment.class);
AktifFragment aktifFragment = new AktifFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("Data",impianItems);
aktifFragment.setArguments(bundle);
startActivity(intent);

这是 Activity 类的完整代码:https ://codeshare.io/GA4weN

这是活动项目类的代码:https ://codeshare.io/aVb1D6

活动适配器:https ://codeshare.io/aVb1D6

片段类:

public class AktifFragment extends Fragment {

ArrayList<ImpianItem> items = new ArrayList<>();

public AktifFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_aktif, container, false);

    //null object reference

    RecyclerView recyclerView = view.findViewById(R.id.rv_impian_list);
    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    
    items = (ArrayList<ImpianItem>) getArguments().getSerializable("Data");
    ImpianAdapter adapter = new ImpianAdapter(items);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(layoutManager);

    return view;
}

}

上面的代码,当我运行它并从出现的消息serializablefragment. 有针对这个的解决方法吗?

标签: androidandroid-fragmentsandroid-recyclerview

解决方案


这是一种序列化对象的简单方法,将它们存储在 SharedPreferences 中,然后存储在您读取对象的片段中。

在你的 Gradle 中:implementation 'com.google.code.gson:gson:2.8.5'

在您的活动中:

  val prefsEditor = getSharedPreferences()!!.edit()
  val gson = Gson()
  val json = gson.toJson(institucion)
  prefsEditor.putString("institucion", json)
  prefsEditor.commit()

在片段中,您可以这样阅读

  val preferences = (activity as YourActivity).getSharedPreferences()
  val gson = Gson()
  val json = preferences.getString("institucion", "")
  ong = gson.fromJson(json, Institucion::class.java)

这是在 kotlin 中,但在 java 中是相同的概念。


推荐阅读