user7485580
user7485580

Reputation:

How to transfer the value to recylerview of one which is received from another fragment?

i have made two fragments in my app. 1st fragment (EditFrag) and 2nd fragment (ListTable). i want to transfer the value of 1st fragment(from EditText of 1st fragment) to the recyclerView of 2nd fragment.

how should i do that.....i can't find right documentation. Thank you for your concern!

MainActivity:

public class MainActivity extends AppCompatActivity implements EditFrag.TransferValue{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListTable frag1=new ListTable();
        FragmentManager manager=getSupportFragmentManager();
        FragmentTransaction transaction=manager.beginTransaction();
        transaction.add(R.id.table_value_container,frag1,"fragment");
        transaction.commit();

        EditFrag frag2=new EditFrag();
        FragmentManager manager1=getSupportFragmentManager();
        FragmentTransaction transaction1=manager1.beginTransaction();
        transaction1.add(R.id.table_container,frag2,"fragment_edit");
        transaction1.commit();
    }


    @Override
    public void sendValue(String value) {
        Log.d("ashu","button is pressed");
        ListTable listTable = (ListTable) getSupportFragmentManager().findFragmentById(R.id.table_value_container);
        listTable.receiveValue(value);
    }

}

2nd fragment(ListTable):

public class ListTable extends Fragment {
    public TextView myEditText1;
    private RecyclerView recyclerView;


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


    public static ListTable newInstance(String param1, String param2) {
        ListTable fragment = new ListTable();
        Bundle args = new Bundle();
        Log.d("ashu", "new instance is called :");
        fragment.setArguments(args);
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.d("ashu", "oncreata called by inflating: ");

        View view = inflater.inflate(R.layout.fragment_list_table, container, false);
        myEditText1 = (TextView) container.findViewById(R.id.table_value);

        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        MyAdapter a = new MyAdapter();
        recyclerView.setAdapter(a);
        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

    }

    public void receiveValue(String value) {


        myEditText1.setText(value);

    }

    public class MyAdapter extends RecyclerView.Adapter<MyDataViewHolder> {


        @Override
        public MyDataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            Log.d("ashu", "oncreateview holder of adapter ia called");

            LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View view = inflater.inflate(R.layout.fragment_list_table, parent, false);


            return new MyDataViewHolder(view);
        }

        @Override
        public void onBindViewHolder(MyDataViewHolder holder, int position) {


            holder.myEditText.setText("Table: " + position);

        }

        @Override
        public int getItemCount() {
            return 10;
        }
    }

    public class MyDataViewHolder extends RecyclerView.ViewHolder {

        public TextView myEditText;

        public MyDataViewHolder(View itemView) {
            super(itemView);
            Log.d("ashu", "DAta view holder is called: ");
            myEditText = (TextView) itemView.findViewById(R.id.table_value);

        }
    }

}

1st Fragment(EditFrag):

public class EditFrag extends Fragment {
    TransferValue SendData;
    EditText inputvalue;
    Button click;


    @Nullable
    @Override
    public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.edit_frag_layout, container, false);
        inputvalue = (EditText) view.findViewById(R.id.edit_text);
        click = (Button) view.findViewById(R.id.click);

        click.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String received = inputvalue.getText().toString();

                SendData.sendValue(received);

            }
        });

        return view;

    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try {
            SendData = (TransferValue) context;
        } catch (ClassCastException e) {
            Log.d("ashu", "implement the methods");
            throw new ClassCastException("implemented the methods");
        }
    }

    public interface TransferValue {

        public void sendValue(String value);

    }
}

Upvotes: 0

Views: 48

Answers (3)

hiashutoshsingh
hiashutoshsingh

Reputation: 1020

create the instance of fragment2 from where want to receive the value to:

public static Fragment2 createInstance(String data) {
        Fragment2 fragment = new Fragment2();
        Bundle bundle = new Bundle();
        bundle.putString("keyword", data);
        fragment.setArguments(bundle);
        return fragment;

    }

and the get the data as below:

Bundle bundle = getArguments();
        if (bundle != null) {
             String data = bundle.getString("data");
        }

Upvotes: 1

RoShan Shan
RoShan Shan

Reputation: 2954

There are many ways to do that. I see your codes above, and 2 fragments loaded at the same time. I usaually use one of 2 ways below to do it.

The first solution: You can use this link using obserable pattern to communication 2 fragments.

The second solution: you can use EventBus lib for communication, it 's very simple

Upvotes: 0

phoenix
phoenix

Reputation: 496

You can use bundle in an order to pass data to fragment:

Example:

    // Set bundle as arguments to the fragment
    Bundle bundle = new Bundle();
    bundle.putString(MyKey1, MyValue1);
    bundle.putString(MyKey2, MyValue2);

    MyFragment myFragment = new MyFragment();
    myFragment.setArguments(bundle);

Inside onCreateView of fragment:

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.repairer_part_details_fragment, container, false);

        String value1 = getArguments().getString(MyKey1);
        String value2 = getArguments().getString(MyKey2);

        return view;
    }

Upvotes: 0

Related Questions