如何在片段中使用Parcelable来获取数据?

萨拉拉斯塔里

我可以在Activity中使用Parcelable,但不知道如何在Fragment中使用它。

我在FragmentGet中有一个ListFragment来显示ListView中的所有行数据库,我想在另一个Fragment中单击时获取ListView的详细信息,我使用Parcelable在Fragment之间传递数据。

这是我的Test.java:

import android.os.Parcel;
import android.os.Parcelable;

public class Test implements Parcelable {

    private int studentNumber;
    private String studentName;
    private String studentFamily;

    public int getStudentNumber() {
        return studentNumber;
    }

    public void setStudentNumber(int studentNumber) {
        this.studentNumber = studentNumber;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getStudentFamily() {
        return studentFamily;
    }

    public void setStudentFamily(String studentFamily) {
        this.studentFamily = studentFamily;
    }

    public Test() {
    }

    public Test(Parcel read) {
        studentNumber = read.readInt();
        studentName = read.readString();
        studentFamily = read.readString();
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel write, int flags) {
        write.writeInt(studentNumber);
        write.writeString(studentName);
        write.writeString(studentFamily);
    }

    public static final Parcelable.Creator<Test> CREATOR =
            new Parcelable.Creator<Test>() {
                @Override
                public Test createFromParcel(Parcel source) {
                    return new TestP(source);
                }
                @Override
                public Test[] newArray(int size) {
                    return new TestP[size];
                }
            };
}

在FragmentSend.java中,我想将数据发送到FragmentGet.java,这是代码:

public class FragmentSend extends ListFragment {

    //    Classes
    TestReadData readData;
    TestDataSource dataSource;

    private List<Test> listTest;       

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


    @TargetApi(Build.VERSION_CODES.M)
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View layout = inflater.inflate(R.layout.fragment_send, container, false);

        readData = new TestReadData(getContext());
        dataSource = new TestDataSource(getContext());  

       refreshStudentList(inflater);

    return layout;
}

public void refreshStudentList(LayoutInflater inflater) {

    listTest = readData.getAllStudentRows();
    ArrayAdapter<Test> testAdapter = new TestFragmentListAdapter(inflater.getContext(), listTest);
    setListAdapter(testAdapter);

}

    @Override
    public void onResume() {
        super.onResume();
        dataSource.open();
    }

    @Override
    public void onPause() {
        super.onPause();
        dataSource.close();
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Test model = listTest.get(position);

        // this three line code is for Activity not Fragment!
        Intent intent = new Intent(getContext(), FragmentGet.class);
        intent.putExtra("Student", model);
       // startActivity(intent);

        // I use this code for fragment
        Fragment fragmentGet = new FragmentGet();
    fragmentGet.setArguments(intent.getExtras());
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.frame_container, fragmentGet);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

    }

在FragmentGet.java中,我得到如下数据:

public class FragmentGet extends Fragment {

    //    Classes
    Test model;    

    //    Variables
    private List<Test> listTest;

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


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

        //        Classes Associated
        model = new Test(Parcel.obtain());

        Bundle bundle = getActivity().getIntent().getExtras();
        model = bundle.getParcelable("Student");

        return layout;    
    }

当我运行该应用程序时,会出现以下错误:

尝试在空对象引用上调用虚拟方法'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)'

如何解决此错误?

德米特里弧

Fragments使用Bundles而不是将数据传递到Intents

FragmentSend改变

Intent intent = new Intent(getContext(), FragmentGet.class);
intent.putExtra("Student", model);

Fragment fragmentGet = new FragmentGet();
fragmentGet.setArguments(intent.getExtras());

对此

Fragment fragmentGet = new FragmentGet();
Bundle bundle = new Bundle();
bundle.putParcelable("Student", model);
fragmentGet.setArguments(bundle);

并接收FragmentGet变化中的数据

Bundle bundle = getActivity().getIntent().getExtras();
model = bundle.getParcelable("Student");

Bundle bundle = this.getArguments();
if (bundle != null) {
    model = bundle.getParcelable("Student");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Java代码中使用Parcelable

来自分类Dev

如何在 AIDL 中使用 Parcelable

来自分类Dev

如何在laravel中使用模型来获取价值?

来自分类Dev

如何在 Excel 中使用 Pandas 来获取线条?

来自分类Dev

如何在导航抽屉的recyclerview项中使用Intent来打开新的活动片段?

来自分类Dev

如何在片段中使用setSupportActionBar

来自分类Dev

如何在子片段中使用OnClickListener?

来自分类Dev

如何在片段中使用 getSupportFragmentManager?

来自分类Dev

如何在片段中使用 setByte?

来自分类Dev

如何在片段中的活动中使用交换片段

来自分类Dev

如何在片段中的活动中使用交换片段

来自分类Dev

如何在片段中的活动中使用交换片段

来自分类Dev

如何在Java中使用递增循环来获取数量递增的变量(以获取所述变量的值)?

来自分类Dev

如何在Java中使用本地化获取数据?

来自分类Dev

如何在asyncTask中使用Cursor获取大量数据?

来自分类Dev

如何在Python中使用Flask从URL获取JSON数据

来自分类Dev

如何在ios中使用GCD获取队列中的数据

来自分类Dev

如何在php中使用id获取数据并插入?

来自分类Dev

Android 在具有远程数据获取的片段中使用 RecyclerView

来自分类Dev

如何在片段内使用 onBackPressed() 来支持 webview?

来自分类Dev

在 Parcelable 中使用 ArrayList 创建数据类

来自分类Dev

如何通过在django中使用两个不同的日期进行过滤来获取数据?

来自分类Dev

如何在R中使用ggplot使用3种条件来刻面数据?

来自分类Dev

使用libpqxx来批量存储数据,或者如何在libpqxx中使用COPY语句

来自分类Dev

使用libpqxx来批量存储数据,或者如何在libpqxx中使用COPY语句

来自分类Dev

如何在Android中使用Jackson来从JSONArray url获取Java对象

来自分类Dev

如何在最新的Microsoft.IdentityModel.Clients.ActiveDirectory中使用PromptBehavior来获取令牌

来自分类Dev

如何在Android Studio中使用过滤器来获取ProGuards -libraryjars?

来自分类Dev

如何在Rails中使用'%20'而不是'+'来获取URL的参数

Related 相关文章

  1. 1

    如何在Java代码中使用Parcelable

  2. 2

    如何在 AIDL 中使用 Parcelable

  3. 3

    如何在laravel中使用模型来获取价值?

  4. 4

    如何在 Excel 中使用 Pandas 来获取线条?

  5. 5

    如何在导航抽屉的recyclerview项中使用Intent来打开新的活动片段?

  6. 6

    如何在片段中使用setSupportActionBar

  7. 7

    如何在子片段中使用OnClickListener?

  8. 8

    如何在片段中使用 getSupportFragmentManager?

  9. 9

    如何在片段中使用 setByte?

  10. 10

    如何在片段中的活动中使用交换片段

  11. 11

    如何在片段中的活动中使用交换片段

  12. 12

    如何在片段中的活动中使用交换片段

  13. 13

    如何在Java中使用递增循环来获取数量递增的变量(以获取所述变量的值)?

  14. 14

    如何在Java中使用本地化获取数据?

  15. 15

    如何在asyncTask中使用Cursor获取大量数据?

  16. 16

    如何在Python中使用Flask从URL获取JSON数据

  17. 17

    如何在ios中使用GCD获取队列中的数据

  18. 18

    如何在php中使用id获取数据并插入?

  19. 19

    Android 在具有远程数据获取的片段中使用 RecyclerView

  20. 20

    如何在片段内使用 onBackPressed() 来支持 webview?

  21. 21

    在 Parcelable 中使用 ArrayList 创建数据类

  22. 22

    如何通过在django中使用两个不同的日期进行过滤来获取数据?

  23. 23

    如何在R中使用ggplot使用3种条件来刻面数据?

  24. 24

    使用libpqxx来批量存储数据,或者如何在libpqxx中使用COPY语句

  25. 25

    使用libpqxx来批量存储数据,或者如何在libpqxx中使用COPY语句

  26. 26

    如何在Android中使用Jackson来从JSONArray url获取Java对象

  27. 27

    如何在最新的Microsoft.IdentityModel.Clients.ActiveDirectory中使用PromptBehavior来获取令牌

  28. 28

    如何在Android Studio中使用过滤器来获取ProGuards -libraryjars?

  29. 29

    如何在Rails中使用'%20'而不是'+'来获取URL的参数

热门标签

归档