首页 > 解决方案 > 无法从适配器检索数据并将其显示为片段

问题描述

我想通过适配器从回收器视图中检索数据并将其显示到片段中,但是当我想在片段中使用数据时,数据仅存储在适配器内的包中,数据始终不会出现。

我的适配器

    @Override
    public void onClick(View v) {

        Bundle bundle = new Bundle();
        bundle.putString(BerandaFragment.KEY_NAME, 
        name.getText().toString());
        bundle.putString(BerandaFragment.KEY_EMAIL, 
        email.getText().toString());

        BerandaFragment berandaFragment = new BerandaFragment();
        berandaFragment.setArguments(bundle);


    }

    My Fragment
    cannot retrieve and display data on etDari
    I'm getting error in line :

    etDari = (EditText) view.findViewById(R.id.et_dari);

    Bundle bundle = getArguments();

    if (getArguments() != null) {
        etDari.setText(bundle.getString(KEY_EMAIL));
        etDari.setText(bundle.getString(KEY_EMAIL));
    }
   //        else {
   //            etDari.setText(KEY_NAME);
   //            etDari.setText(KEY_EMAIL);
   //        }

标签: javaandroidandroid-fragmentsandroid-recyclerviewadapter

解决方案


From Your Adapter Pass Data to Fragment in a mentioned way :
-------------------------------------------------------------------------------
replaceFragment(FragmentPurchaseWastageDetails.newInstance(requestList.get(position).getDate()));

Replace Fragment Code
-----------------------------
 public void replaceFragment(Fragment fragment) {
        String backStateName = fragment.getClass().getName();
        FragmentManager manager = getSupportFragmentManager();
        boolean fragmentPopped = false;
        try {
            fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
        } catch (Exception e) {
            e.printStackTrace();
        }
        /*
          if fragment not in back stack, create it.
         */
        if (!fragmentPopped && manager.findFragmentByTag(backStateName) == null) {
            FragmentTransaction ft = manager.beginTransaction();
            ft.replace(R.id.mainContainer, fragment, backStateName);
            ft.addToBackStack(backStateName);
            ft.commitAllowingStateLoss();
        }
    }

--------------------------------------------------
To get data In Fragment (Make newInstance method in your fragment)

public static FragmentPurchaseWastageDetails newInstance(String date) {

        Bundle args = new Bundle();
        args.putString("date", date);
        FragmentPurchaseWastageDetails fragment = new FragmentPurchaseWastageDetails();
        fragment.setArguments(args);
        return fragment;
    }
--------------------------------------------------------------
In method of onViewCreated put the mentioned code to get data
------------------------------------------------------------

 private void getDatafromBundle() {
        if (getArguments() != null) {
            date = getArguments().getString("date");
        }
    }

推荐阅读