Send Object from One Fragment to Another












1















I have two fragments in which1st fragment(Business) there is a object stringlist that needs to be transferred to 2nd fragment(Businessdetail).



I want to know what is the best method of practise and how should i do it?



public class Business extends Fragment {

public List<StringList> businessNews = new ArrayList<>();
private RecyclerView recyclerView;
StringList stringList; //object need to transfered to other fragment
public Business() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_business, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.business_recycler_view);

FetchLists f = new FetchLists();
f.execute(10, 0);
return view;
}

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


public class FetchLists extends AsyncTask<Integer, Void, List<StringList>> {

@Override
protected List<StringList> doInBackground(Integer... params) {

int count = params[0];
int offset = params[1];

String urlString = "https://nei.org/v1/articlesbjkbknklnmlmerg&sortBy=top&apiKey=50e2bjkbbkba5a5f476ff528a8";
urlString = urlString + "&count=" + count + "&offset=" + offset;

try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = reader.readLine();
String response = "";
while (line != null) {
response += line;
line = reader.readLine();
}

JSONObject object = new JSONObject(response);
JSONArray emailLists = object.getJSONArray("articles");

for (int i = 0; i < emailLists.length(); i++) {
JSONObject listData = (JSONObject) emailLists.get(i);

stringList = new StringList();
stringList.authorName = listData.getString("author");
stringList.headline = listData.getString("title");
stringList.publishedTime = listData.getString("publishedAt");
stringList.newsDetail = listData.getString("description");

businessNews.add(stringList);
Log.d("ashu", "authorname" + stringList.authorName);
}

} catch (Exception e) {
e.printStackTrace();
}
return businessNews;
}

public class BusinessAdapter extends RecyclerView.Adapter<BusinessHolder> {



@Override
public BusinessHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Context context = parent.getContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_news, parent, false);
return new BusinessHolder(view);
}

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

StringList m = c.get(position);
holder.bindListName(m, position);
}}

public class BusinessHolder extends RecyclerView.ViewHolder {

public TextView headlineTextview;
public TextView authorTextview;
public TextView timeTextview;

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

headlineTextview = (TextView) itemView.findViewById(R.id.id_headline);
authorTextview = (TextView) itemView.findViewById(R.id.id_author);
timeTextview = (TextView) itemView.findViewById(R.id.id_time);

}


2nd Fragment:



In this fragment i want to set the object data to the Textview Parameters



public class BusinessDetail extends Fragment {
StringList mstringList;
private TextView headlineSecond;
public TextView authorSecond;
private TextView detailsSecond;


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

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


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

headlineSecond = (TextView) view.findViewById(R.id.id_headline_second);
authorSecond = (TextView) view.findViewById(R.id.id_author_second);
detailsSecond = (TextView) view.findViewById(R.id.id_details_second);
}}









share|improve this question

























  • which object you want to transfer from one fragment to another in your code

    – Sandeep dhiman
    May 29 '17 at 17:14











  • Are both Fragments in the same activity?

    – Juan
    May 29 '17 at 17:15











  • yes both fragment are in same activity

    – user7620502
    May 29 '17 at 17:16











  • "stringlist" is the object that i want to tranfer

    – user7620502
    May 29 '17 at 17:17
















1















I have two fragments in which1st fragment(Business) there is a object stringlist that needs to be transferred to 2nd fragment(Businessdetail).



I want to know what is the best method of practise and how should i do it?



public class Business extends Fragment {

public List<StringList> businessNews = new ArrayList<>();
private RecyclerView recyclerView;
StringList stringList; //object need to transfered to other fragment
public Business() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_business, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.business_recycler_view);

FetchLists f = new FetchLists();
f.execute(10, 0);
return view;
}

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


public class FetchLists extends AsyncTask<Integer, Void, List<StringList>> {

@Override
protected List<StringList> doInBackground(Integer... params) {

int count = params[0];
int offset = params[1];

String urlString = "https://nei.org/v1/articlesbjkbknklnmlmerg&sortBy=top&apiKey=50e2bjkbbkba5a5f476ff528a8";
urlString = urlString + "&count=" + count + "&offset=" + offset;

try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = reader.readLine();
String response = "";
while (line != null) {
response += line;
line = reader.readLine();
}

JSONObject object = new JSONObject(response);
JSONArray emailLists = object.getJSONArray("articles");

for (int i = 0; i < emailLists.length(); i++) {
JSONObject listData = (JSONObject) emailLists.get(i);

stringList = new StringList();
stringList.authorName = listData.getString("author");
stringList.headline = listData.getString("title");
stringList.publishedTime = listData.getString("publishedAt");
stringList.newsDetail = listData.getString("description");

businessNews.add(stringList);
Log.d("ashu", "authorname" + stringList.authorName);
}

} catch (Exception e) {
e.printStackTrace();
}
return businessNews;
}

public class BusinessAdapter extends RecyclerView.Adapter<BusinessHolder> {



@Override
public BusinessHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Context context = parent.getContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_news, parent, false);
return new BusinessHolder(view);
}

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

StringList m = c.get(position);
holder.bindListName(m, position);
}}

public class BusinessHolder extends RecyclerView.ViewHolder {

public TextView headlineTextview;
public TextView authorTextview;
public TextView timeTextview;

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

headlineTextview = (TextView) itemView.findViewById(R.id.id_headline);
authorTextview = (TextView) itemView.findViewById(R.id.id_author);
timeTextview = (TextView) itemView.findViewById(R.id.id_time);

}


2nd Fragment:



In this fragment i want to set the object data to the Textview Parameters



public class BusinessDetail extends Fragment {
StringList mstringList;
private TextView headlineSecond;
public TextView authorSecond;
private TextView detailsSecond;


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

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


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

headlineSecond = (TextView) view.findViewById(R.id.id_headline_second);
authorSecond = (TextView) view.findViewById(R.id.id_author_second);
detailsSecond = (TextView) view.findViewById(R.id.id_details_second);
}}









share|improve this question

























  • which object you want to transfer from one fragment to another in your code

    – Sandeep dhiman
    May 29 '17 at 17:14











  • Are both Fragments in the same activity?

    – Juan
    May 29 '17 at 17:15











  • yes both fragment are in same activity

    – user7620502
    May 29 '17 at 17:16











  • "stringlist" is the object that i want to tranfer

    – user7620502
    May 29 '17 at 17:17














1












1








1








I have two fragments in which1st fragment(Business) there is a object stringlist that needs to be transferred to 2nd fragment(Businessdetail).



I want to know what is the best method of practise and how should i do it?



public class Business extends Fragment {

public List<StringList> businessNews = new ArrayList<>();
private RecyclerView recyclerView;
StringList stringList; //object need to transfered to other fragment
public Business() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_business, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.business_recycler_view);

FetchLists f = new FetchLists();
f.execute(10, 0);
return view;
}

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


public class FetchLists extends AsyncTask<Integer, Void, List<StringList>> {

@Override
protected List<StringList> doInBackground(Integer... params) {

int count = params[0];
int offset = params[1];

String urlString = "https://nei.org/v1/articlesbjkbknklnmlmerg&sortBy=top&apiKey=50e2bjkbbkba5a5f476ff528a8";
urlString = urlString + "&count=" + count + "&offset=" + offset;

try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = reader.readLine();
String response = "";
while (line != null) {
response += line;
line = reader.readLine();
}

JSONObject object = new JSONObject(response);
JSONArray emailLists = object.getJSONArray("articles");

for (int i = 0; i < emailLists.length(); i++) {
JSONObject listData = (JSONObject) emailLists.get(i);

stringList = new StringList();
stringList.authorName = listData.getString("author");
stringList.headline = listData.getString("title");
stringList.publishedTime = listData.getString("publishedAt");
stringList.newsDetail = listData.getString("description");

businessNews.add(stringList);
Log.d("ashu", "authorname" + stringList.authorName);
}

} catch (Exception e) {
e.printStackTrace();
}
return businessNews;
}

public class BusinessAdapter extends RecyclerView.Adapter<BusinessHolder> {



@Override
public BusinessHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Context context = parent.getContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_news, parent, false);
return new BusinessHolder(view);
}

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

StringList m = c.get(position);
holder.bindListName(m, position);
}}

public class BusinessHolder extends RecyclerView.ViewHolder {

public TextView headlineTextview;
public TextView authorTextview;
public TextView timeTextview;

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

headlineTextview = (TextView) itemView.findViewById(R.id.id_headline);
authorTextview = (TextView) itemView.findViewById(R.id.id_author);
timeTextview = (TextView) itemView.findViewById(R.id.id_time);

}


2nd Fragment:



In this fragment i want to set the object data to the Textview Parameters



public class BusinessDetail extends Fragment {
StringList mstringList;
private TextView headlineSecond;
public TextView authorSecond;
private TextView detailsSecond;


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

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


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

headlineSecond = (TextView) view.findViewById(R.id.id_headline_second);
authorSecond = (TextView) view.findViewById(R.id.id_author_second);
detailsSecond = (TextView) view.findViewById(R.id.id_details_second);
}}









share|improve this question
















I have two fragments in which1st fragment(Business) there is a object stringlist that needs to be transferred to 2nd fragment(Businessdetail).



I want to know what is the best method of practise and how should i do it?



public class Business extends Fragment {

public List<StringList> businessNews = new ArrayList<>();
private RecyclerView recyclerView;
StringList stringList; //object need to transfered to other fragment
public Business() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment_business, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.business_recycler_view);

FetchLists f = new FetchLists();
f.execute(10, 0);
return view;
}

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


public class FetchLists extends AsyncTask<Integer, Void, List<StringList>> {

@Override
protected List<StringList> doInBackground(Integer... params) {

int count = params[0];
int offset = params[1];

String urlString = "https://nei.org/v1/articlesbjkbknklnmlmerg&sortBy=top&apiKey=50e2bjkbbkba5a5f476ff528a8";
urlString = urlString + "&count=" + count + "&offset=" + offset;

try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
String line = reader.readLine();
String response = "";
while (line != null) {
response += line;
line = reader.readLine();
}

JSONObject object = new JSONObject(response);
JSONArray emailLists = object.getJSONArray("articles");

for (int i = 0; i < emailLists.length(); i++) {
JSONObject listData = (JSONObject) emailLists.get(i);

stringList = new StringList();
stringList.authorName = listData.getString("author");
stringList.headline = listData.getString("title");
stringList.publishedTime = listData.getString("publishedAt");
stringList.newsDetail = listData.getString("description");

businessNews.add(stringList);
Log.d("ashu", "authorname" + stringList.authorName);
}

} catch (Exception e) {
e.printStackTrace();
}
return businessNews;
}

public class BusinessAdapter extends RecyclerView.Adapter<BusinessHolder> {



@Override
public BusinessHolder onCreateViewHolder(ViewGroup parent, int viewType) {

Context context = parent.getContext();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.layout_news, parent, false);
return new BusinessHolder(view);
}

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

StringList m = c.get(position);
holder.bindListName(m, position);
}}

public class BusinessHolder extends RecyclerView.ViewHolder {

public TextView headlineTextview;
public TextView authorTextview;
public TextView timeTextview;

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

headlineTextview = (TextView) itemView.findViewById(R.id.id_headline);
authorTextview = (TextView) itemView.findViewById(R.id.id_author);
timeTextview = (TextView) itemView.findViewById(R.id.id_time);

}


2nd Fragment:



In this fragment i want to set the object data to the Textview Parameters



public class BusinessDetail extends Fragment {
StringList mstringList;
private TextView headlineSecond;
public TextView authorSecond;
private TextView detailsSecond;


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

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


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

headlineSecond = (TextView) view.findViewById(R.id.id_headline_second);
authorSecond = (TextView) view.findViewById(R.id.id_author_second);
detailsSecond = (TextView) view.findViewById(R.id.id_details_second);
}}






android object android-fragments android-fragmentactivity






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 29 '17 at 18:12









Quick learner

2,6001925




2,6001925










asked May 29 '17 at 17:07







user7620502




















  • which object you want to transfer from one fragment to another in your code

    – Sandeep dhiman
    May 29 '17 at 17:14











  • Are both Fragments in the same activity?

    – Juan
    May 29 '17 at 17:15











  • yes both fragment are in same activity

    – user7620502
    May 29 '17 at 17:16











  • "stringlist" is the object that i want to tranfer

    – user7620502
    May 29 '17 at 17:17



















  • which object you want to transfer from one fragment to another in your code

    – Sandeep dhiman
    May 29 '17 at 17:14











  • Are both Fragments in the same activity?

    – Juan
    May 29 '17 at 17:15











  • yes both fragment are in same activity

    – user7620502
    May 29 '17 at 17:16











  • "stringlist" is the object that i want to tranfer

    – user7620502
    May 29 '17 at 17:17

















which object you want to transfer from one fragment to another in your code

– Sandeep dhiman
May 29 '17 at 17:14





which object you want to transfer from one fragment to another in your code

– Sandeep dhiman
May 29 '17 at 17:14













Are both Fragments in the same activity?

– Juan
May 29 '17 at 17:15





Are both Fragments in the same activity?

– Juan
May 29 '17 at 17:15













yes both fragment are in same activity

– user7620502
May 29 '17 at 17:16





yes both fragment are in same activity

– user7620502
May 29 '17 at 17:16













"stringlist" is the object that i want to tranfer

– user7620502
May 29 '17 at 17:17





"stringlist" is the object that i want to tranfer

– user7620502
May 29 '17 at 17:17












5 Answers
5






active

oldest

votes


















1














Fragments are not supposed to know about each other.



Instead of tranfering from one fragment to another, declare the object list in the activity and have each fragment get it from there:



To do that in main activity declare the object list and a getter for the list:



public List<StringList> businessNews = new ArrayList<>();

public List<StringList> getObjectList(){
return objectList;
}


Then in the Fragments, you can get the list:



((MainActivity) getActivity()).getObjectList();


You could make this call in onResume() to make sure the Fragment and the Activity are ready.



For a more correct solution, this part ((MainActivity) getActivity())could be implemented using an interface so as to avoid the casting.






share|improve this answer
























  • Thanx it worked!

    – user7620502
    May 30 '17 at 2:58











  • May i know , how to make a loader to make it running till my mews are fetched from the api?

    – user7620502
    May 30 '17 at 2:59











  • You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

    – Juan
    May 30 '17 at 13:55



















1














If BusinessDetail and Business are children of the same activity, you should provide an interface between both fragments and the activity. In your Business fragment, you could make this call (in the fragment's onAttach or after):



((MyActivity)getActivity()).showObjectOnBusiness(stringList);


In the MyActivity showObjectOnBusiness method, you should pass the object to the BusinessDetail fragment:



Bundle bundle = new Bundle();
bundle.putParcelable(BusinessDetail.OBJECT_KEY, stringList);
new BusinessDetail().setArguments(bundle);


Inside your BusinessDetail, you may obtain your object through the arguments:



Bundle bundle = getArguments();

if (bundle == null || !bundle.containsKey(OBJECT_KEY)) {
throw new IllegalArgumentException("StringList should not be null");
}
StringList stringList = bundle.getParcelable(OBJECT_KEY);


StringList should implement Parcelable.






share|improve this answer

































    0














    Saving reference to fragment in another one - bad practice. You can use this method, it works fine.






    share|improve this answer































      0














      You can achieve this through following code



      Bundle bundle = new Bundle();
      bundle.putParcelableArrayList("Key_List", businessNews);
      fragmentInstance.setArguments(bundle);


      You can also use Serializable but serializable is slower than parcelable



       Bundle bundle = new Bundle();
      bundles.putSerializable("Key_List", businessNews);
      fragmentInstance.setArguments(bundle);





      share|improve this answer































        0














        You can use
        Event Bus library



        It will simplify the communication between components,



        works on publisher/subscriber pattern.






        share|improve this answer























          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f44247482%2fsend-object-from-one-fragment-to-another%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown
























          5 Answers
          5






          active

          oldest

          votes








          5 Answers
          5






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          Fragments are not supposed to know about each other.



          Instead of tranfering from one fragment to another, declare the object list in the activity and have each fragment get it from there:



          To do that in main activity declare the object list and a getter for the list:



          public List<StringList> businessNews = new ArrayList<>();

          public List<StringList> getObjectList(){
          return objectList;
          }


          Then in the Fragments, you can get the list:



          ((MainActivity) getActivity()).getObjectList();


          You could make this call in onResume() to make sure the Fragment and the Activity are ready.



          For a more correct solution, this part ((MainActivity) getActivity())could be implemented using an interface so as to avoid the casting.






          share|improve this answer
























          • Thanx it worked!

            – user7620502
            May 30 '17 at 2:58











          • May i know , how to make a loader to make it running till my mews are fetched from the api?

            – user7620502
            May 30 '17 at 2:59











          • You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

            – Juan
            May 30 '17 at 13:55
















          1














          Fragments are not supposed to know about each other.



          Instead of tranfering from one fragment to another, declare the object list in the activity and have each fragment get it from there:



          To do that in main activity declare the object list and a getter for the list:



          public List<StringList> businessNews = new ArrayList<>();

          public List<StringList> getObjectList(){
          return objectList;
          }


          Then in the Fragments, you can get the list:



          ((MainActivity) getActivity()).getObjectList();


          You could make this call in onResume() to make sure the Fragment and the Activity are ready.



          For a more correct solution, this part ((MainActivity) getActivity())could be implemented using an interface so as to avoid the casting.






          share|improve this answer
























          • Thanx it worked!

            – user7620502
            May 30 '17 at 2:58











          • May i know , how to make a loader to make it running till my mews are fetched from the api?

            – user7620502
            May 30 '17 at 2:59











          • You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

            – Juan
            May 30 '17 at 13:55














          1












          1








          1







          Fragments are not supposed to know about each other.



          Instead of tranfering from one fragment to another, declare the object list in the activity and have each fragment get it from there:



          To do that in main activity declare the object list and a getter for the list:



          public List<StringList> businessNews = new ArrayList<>();

          public List<StringList> getObjectList(){
          return objectList;
          }


          Then in the Fragments, you can get the list:



          ((MainActivity) getActivity()).getObjectList();


          You could make this call in onResume() to make sure the Fragment and the Activity are ready.



          For a more correct solution, this part ((MainActivity) getActivity())could be implemented using an interface so as to avoid the casting.






          share|improve this answer













          Fragments are not supposed to know about each other.



          Instead of tranfering from one fragment to another, declare the object list in the activity and have each fragment get it from there:



          To do that in main activity declare the object list and a getter for the list:



          public List<StringList> businessNews = new ArrayList<>();

          public List<StringList> getObjectList(){
          return objectList;
          }


          Then in the Fragments, you can get the list:



          ((MainActivity) getActivity()).getObjectList();


          You could make this call in onResume() to make sure the Fragment and the Activity are ready.



          For a more correct solution, this part ((MainActivity) getActivity())could be implemented using an interface so as to avoid the casting.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered May 29 '17 at 17:28









          JuanJuan

          4,5012919




          4,5012919













          • Thanx it worked!

            – user7620502
            May 30 '17 at 2:58











          • May i know , how to make a loader to make it running till my mews are fetched from the api?

            – user7620502
            May 30 '17 at 2:59











          • You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

            – Juan
            May 30 '17 at 13:55



















          • Thanx it worked!

            – user7620502
            May 30 '17 at 2:58











          • May i know , how to make a loader to make it running till my mews are fetched from the api?

            – user7620502
            May 30 '17 at 2:59











          • You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

            – Juan
            May 30 '17 at 13:55

















          Thanx it worked!

          – user7620502
          May 30 '17 at 2:58





          Thanx it worked!

          – user7620502
          May 30 '17 at 2:58













          May i know , how to make a loader to make it running till my mews are fetched from the api?

          – user7620502
          May 30 '17 at 2:59





          May i know , how to make a loader to make it running till my mews are fetched from the api?

          – user7620502
          May 30 '17 at 2:59













          You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

          – Juan
          May 30 '17 at 13:55





          You can use a indeterminate progress bar o an existing library like crystal-preloaders: github.com/syedowaisali/crystal-preloaders.

          – Juan
          May 30 '17 at 13:55













          1














          If BusinessDetail and Business are children of the same activity, you should provide an interface between both fragments and the activity. In your Business fragment, you could make this call (in the fragment's onAttach or after):



          ((MyActivity)getActivity()).showObjectOnBusiness(stringList);


          In the MyActivity showObjectOnBusiness method, you should pass the object to the BusinessDetail fragment:



          Bundle bundle = new Bundle();
          bundle.putParcelable(BusinessDetail.OBJECT_KEY, stringList);
          new BusinessDetail().setArguments(bundle);


          Inside your BusinessDetail, you may obtain your object through the arguments:



          Bundle bundle = getArguments();

          if (bundle == null || !bundle.containsKey(OBJECT_KEY)) {
          throw new IllegalArgumentException("StringList should not be null");
          }
          StringList stringList = bundle.getParcelable(OBJECT_KEY);


          StringList should implement Parcelable.






          share|improve this answer






























            1














            If BusinessDetail and Business are children of the same activity, you should provide an interface between both fragments and the activity. In your Business fragment, you could make this call (in the fragment's onAttach or after):



            ((MyActivity)getActivity()).showObjectOnBusiness(stringList);


            In the MyActivity showObjectOnBusiness method, you should pass the object to the BusinessDetail fragment:



            Bundle bundle = new Bundle();
            bundle.putParcelable(BusinessDetail.OBJECT_KEY, stringList);
            new BusinessDetail().setArguments(bundle);


            Inside your BusinessDetail, you may obtain your object through the arguments:



            Bundle bundle = getArguments();

            if (bundle == null || !bundle.containsKey(OBJECT_KEY)) {
            throw new IllegalArgumentException("StringList should not be null");
            }
            StringList stringList = bundle.getParcelable(OBJECT_KEY);


            StringList should implement Parcelable.






            share|improve this answer




























              1












              1








              1







              If BusinessDetail and Business are children of the same activity, you should provide an interface between both fragments and the activity. In your Business fragment, you could make this call (in the fragment's onAttach or after):



              ((MyActivity)getActivity()).showObjectOnBusiness(stringList);


              In the MyActivity showObjectOnBusiness method, you should pass the object to the BusinessDetail fragment:



              Bundle bundle = new Bundle();
              bundle.putParcelable(BusinessDetail.OBJECT_KEY, stringList);
              new BusinessDetail().setArguments(bundle);


              Inside your BusinessDetail, you may obtain your object through the arguments:



              Bundle bundle = getArguments();

              if (bundle == null || !bundle.containsKey(OBJECT_KEY)) {
              throw new IllegalArgumentException("StringList should not be null");
              }
              StringList stringList = bundle.getParcelable(OBJECT_KEY);


              StringList should implement Parcelable.






              share|improve this answer















              If BusinessDetail and Business are children of the same activity, you should provide an interface between both fragments and the activity. In your Business fragment, you could make this call (in the fragment's onAttach or after):



              ((MyActivity)getActivity()).showObjectOnBusiness(stringList);


              In the MyActivity showObjectOnBusiness method, you should pass the object to the BusinessDetail fragment:



              Bundle bundle = new Bundle();
              bundle.putParcelable(BusinessDetail.OBJECT_KEY, stringList);
              new BusinessDetail().setArguments(bundle);


              Inside your BusinessDetail, you may obtain your object through the arguments:



              Bundle bundle = getArguments();

              if (bundle == null || !bundle.containsKey(OBJECT_KEY)) {
              throw new IllegalArgumentException("StringList should not be null");
              }
              StringList stringList = bundle.getParcelable(OBJECT_KEY);


              StringList should implement Parcelable.







              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited May 29 '17 at 17:37

























              answered May 29 '17 at 17:23









              jscjsc

              1037




              1037























                  0














                  Saving reference to fragment in another one - bad practice. You can use this method, it works fine.






                  share|improve this answer




























                    0














                    Saving reference to fragment in another one - bad practice. You can use this method, it works fine.






                    share|improve this answer


























                      0












                      0








                      0







                      Saving reference to fragment in another one - bad practice. You can use this method, it works fine.






                      share|improve this answer













                      Saving reference to fragment in another one - bad practice. You can use this method, it works fine.







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered May 29 '17 at 17:25









                      Ovechkin PavelOvechkin Pavel

                      659522




                      659522























                          0














                          You can achieve this through following code



                          Bundle bundle = new Bundle();
                          bundle.putParcelableArrayList("Key_List", businessNews);
                          fragmentInstance.setArguments(bundle);


                          You can also use Serializable but serializable is slower than parcelable



                           Bundle bundle = new Bundle();
                          bundles.putSerializable("Key_List", businessNews);
                          fragmentInstance.setArguments(bundle);





                          share|improve this answer




























                            0














                            You can achieve this through following code



                            Bundle bundle = new Bundle();
                            bundle.putParcelableArrayList("Key_List", businessNews);
                            fragmentInstance.setArguments(bundle);


                            You can also use Serializable but serializable is slower than parcelable



                             Bundle bundle = new Bundle();
                            bundles.putSerializable("Key_List", businessNews);
                            fragmentInstance.setArguments(bundle);





                            share|improve this answer


























                              0












                              0








                              0







                              You can achieve this through following code



                              Bundle bundle = new Bundle();
                              bundle.putParcelableArrayList("Key_List", businessNews);
                              fragmentInstance.setArguments(bundle);


                              You can also use Serializable but serializable is slower than parcelable



                               Bundle bundle = new Bundle();
                              bundles.putSerializable("Key_List", businessNews);
                              fragmentInstance.setArguments(bundle);





                              share|improve this answer













                              You can achieve this through following code



                              Bundle bundle = new Bundle();
                              bundle.putParcelableArrayList("Key_List", businessNews);
                              fragmentInstance.setArguments(bundle);


                              You can also use Serializable but serializable is slower than parcelable



                               Bundle bundle = new Bundle();
                              bundles.putSerializable("Key_List", businessNews);
                              fragmentInstance.setArguments(bundle);






                              share|improve this answer












                              share|improve this answer



                              share|improve this answer










                              answered May 29 '17 at 17:29









                              Sandeep dhimanSandeep dhiman

                              7441615




                              7441615























                                  0














                                  You can use
                                  Event Bus library



                                  It will simplify the communication between components,



                                  works on publisher/subscriber pattern.






                                  share|improve this answer




























                                    0














                                    You can use
                                    Event Bus library



                                    It will simplify the communication between components,



                                    works on publisher/subscriber pattern.






                                    share|improve this answer


























                                      0












                                      0








                                      0







                                      You can use
                                      Event Bus library



                                      It will simplify the communication between components,



                                      works on publisher/subscriber pattern.






                                      share|improve this answer













                                      You can use
                                      Event Bus library



                                      It will simplify the communication between components,



                                      works on publisher/subscriber pattern.







                                      share|improve this answer












                                      share|improve this answer



                                      share|improve this answer










                                      answered May 29 '17 at 17:34









                                      Rachit SolankiRachit Solanki

                                      334412




                                      334412






























                                          draft saved

                                          draft discarded




















































                                          Thanks for contributing an answer to Stack Overflow!


                                          • Please be sure to answer the question. Provide details and share your research!

                                          But avoid



                                          • Asking for help, clarification, or responding to other answers.

                                          • Making statements based on opinion; back them up with references or personal experience.


                                          To learn more, see our tips on writing great answers.




                                          draft saved


                                          draft discarded














                                          StackExchange.ready(
                                          function () {
                                          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f44247482%2fsend-object-from-one-fragment-to-another%23new-answer', 'question_page');
                                          }
                                          );

                                          Post as a guest















                                          Required, but never shown





















































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown

































                                          Required, but never shown














                                          Required, but never shown












                                          Required, but never shown







                                          Required, but never shown







                                          Popular posts from this blog

                                          Wiesbaden

                                          Marschland

                                          Dieringhausen