0

SecondFragment

I have create a Tab Activity. I am getting null value in ArrayList while sending value from one Fragment to other Fragment. I am getting the value in second fragment but unable to setting it up ArrayList. i am using RecyclerView for showing the values in row.

    import android.app.Application;
    import android.content.Context;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;

    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Random;
    import java.util.jar.Attributes;

    public class Registration_Details extends Fragment {

        RecyclerView recyclerView;
        ArrayList list;
        List<String> list2;
        MyAddapter myAddapter;
        Context context;
        Bundle bundle;
        TextView textView,textView2,textView3;
        String name, contact,email;
        private Random mRandom = new Random();
        private TextView memail,mphone,muser;
        View rootView;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ArrayValueAdd();


        }

        private void ArrayValueAdd() {

            Bundle bundle = this.getArguments();

            if (bundle != null) {

                name = bundle.getString("Name");
                contact = bundle.getString("Contact");
                email = bundle.getString("Email");




            }


            list = new ArrayList<String>(3);


            for (int i = 0; i <= 5; i++) {


//Here unable to getting the value
                list.add(name);
                list.add(contact);
                list.add(email);

//Getting the value in Log.e

                Log.e(name, "This is my message");


            }

        }

        @Override
        public void onStart() {
            super.onStart();
            ArrayValueAdd();
        }

            @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            rootView = inflater.inflate(R.layout.registration_details, container, false);
            recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
            recyclerView.setHasFixedSize(true);

            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getActivity());
            linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
            recyclerView.setLayoutManager(linearLayoutManager);






                RelativeLayout relativeLayout = (RelativeLayout) rootView.findViewById(R.id.tv);




            myAddapter = new MyAddapter(getActivity(), list, new OnMyItemClickListner() {
                @Override
                public void onItemClicked(int pos) {


                }
            }, new OndeleteItem() {

                @Override
                public void ondelete(int pos) {



                    Toast.makeText(getActivity(), String.valueOf(name), Toast.LENGTH_LONG).show();

                    myAddapter.notifyDataSetChanged();
                }

        }




            );

             recyclerView.setAdapter(myAddapter);
            return rootView;
        }


    }

FirstFragment

import android.os.Bundle;
import android.service.carrier.CarrierMessagingService;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class Registration_Tab  extends Fragment {

    EditText editTextName, editTextContact,editTextEmail;
    View rootView;
    Button submitButton;
    String name,contact,email;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.registration_tab, container, false);

        editTextName = (EditText)rootView.findViewById(R.id.editTextName);

        editTextContact = (EditText)rootView.findViewById(R.id.editTextContact);

        editTextEmail = (EditText)rootView.findViewById(R.id.editTextEmail);

        submitButton = (Button) rootView.findViewById(R.id.button);




        submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                name = editTextName.getText().toString();
                contact = editTextContact.getText().toString();
                email = editTextEmail.getText().toString();

                Bundle bundle=new Bundle();
                bundle.putString("Name",name);
                bundle.putString("Contact",contact);
                bundle.putString("Email",email);






            FragmentTransaction transection=getFragmentManager().beginTransaction();
            Registration_Details registration_details=new Registration_Details();
                registration_details.setArguments(bundle); //data being send to SecondFragment
                transection.replace(R.id.constraintLayout, registration_details);
                transection.commit();

                Toast.makeText(getActivity(),"Goingg  " +name,Toast.LENGTH_LONG).show();


            }
        });






        return rootView;
    }


}

Updated SecondFragment

import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.jar.Attributes;

public class Registration_Details extends Fragment {

    RecyclerView recyclerView;
    ArrayList list;
    List<String> list2;
    MyAddapter myAddapter;
    Context context;
    Bundle bundle;
    TextView textView,textView2,textView3;
    String name, contact,email;
    private Random mRandom = new Random();
    private TextView memail,mphone,muser;
    View rootView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);




    }


    @Override
    public void onStart() {
        super.onStart();
    }

        @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.registration_details, container, false);
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view);
        recyclerView.setHasFixedSize(true);

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this.getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);


            Bundle bundle = this.getArguments();

            if (bundle != null) {

                name = bundle.getString("Name");
                contact = bundle.getString("Contact");
                email = bundle.getString("Email");




            }


            list = new ArrayList<String>();
            list.add(name);
            list.add(contact);
            list.add(email);

            Log.e(name, "This is my message");




        myAddapter = new MyAddapter(getActivity(), list, new OnMyItemClickListner() {
            @Override
            public void onItemClicked(int pos) {


            }
        }, new OndeleteItem() {

            @Override
            public void ondelete(int pos) {



                Toast.makeText(getActivity(), String.valueOf(name), Toast.LENGTH_LONG).show();

                myAddapter.notifyDataSetChanged();
            }

    }




        );

         recyclerView.setAdapter(myAddapter);
        return rootView;
    }


}

MyAddapter

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.suyash.shivrai_tech.OnMyItemClickListner;
import java.util.List;

public class MyAddapter extends RecyclerView.Adapter<MyAddapter.MyViewHolder>{

    Context context;
    List<String> list,list2;
String s1,s2,s3;
    public OnMyItemClickListner onitem;
    public OndeleteItem ondeleteitem;


    public MyAddapter(Context context, List<String> list, OnMyItemClickListner onitem, OndeleteItem ondeleteItem){

        this.context = context;
        this.list = list;
        this.onitem = onitem;
        this.ondeleteitem = ondeleteItem;


    }

    public MyAddapter(FragmentActivity activity, List<String> list, OndeleteItem ondeleteItem) {
    }


    @Override
    public MyViewHolder onCreateViewHolder( ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.row, viewGroup, false);

        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder myViewHolder, final int i) {



        myViewHolder.textView.setText(list.get(i));

        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

             onitem.onItemClicked(i);


            }
        });

        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ondeleteitem.ondelete(i);
            }
        });





    }

    @Override
    public int getItemCount( ) {

        return list.size();

    }

    class MyViewHolder extends RecyclerView.ViewHolder{

        TextView textView,textView2;

       public MyViewHolder(View itemView) {
           super(itemView);

           textView =(TextView)itemView.findViewById(R.id.tv);




       }
   }

}
CannonSuyash
  • 157
  • 1
  • 2
  • 10

1 Answers1

1

The problem is with your list initialisation and method placement,

Do this:

list = new ArrayList<String>();

and call theArrayValueAdd method only in the onCreateView or onViewCreated of your fragment, right now the methods are executed with the lifecycle of the Activity rather than of the Fragment which makes them never execute as the Activity has already passed the states.

Also there's not need to loop, you can just do:

list = new ArrayList<String>();
list.add(name);
list.add(contact);
list.add(email);

no loops nothing.

Fragments cannot pass data directly to another fragment in order to do so you need it to flow from the parent Activity

Check this answer for a detailed explanation: here

MadScientist
  • 2,134
  • 14
  • 27