J'essaie d'implémenter plusieurs fragments. Chaque fragment est visualisé dans une activité qui change ou est remplacée quand je clique sur mon bouton de navigation inférieur. J'ai été capable de passer les données de frag1 à frag2, cependant si je clique sur frag2 ou n'importe quel autre bouton de fragment, la barre de navigation est ici réinitialisée et les données sont perdues.Préserver l'état des fragments?
Voici ce que j'ai essayé par moi-même: j'ai implémenté onSaveInstanceState dans le second fragment, mais inutile. D'une manière ou d'une autre, le fragment est nouvellement créé.
également essayé la solution mentionnée here
Juste une idée ici est la mise en page
MainActivity
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.br.tron.bottombar.RadioFragment;
import com.br.tron.bottombar.StreamFragment;
import com.br.tron.bottombar.InfoFragment;
public class MainActivity extends AppCompatActivity implements PushStreamLink{
BottomNavigationView bottomNavigationView;
private Fragment fragment;
private FragmentManager fragmentManager;
View view;
//private FragmentTransaction transaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
fragment = new RadioFragment();
fragment.setRetainInstance(true);
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment).commit();
bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationBar);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener(){
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
String tag = "";
switch (item.getItemId()) {
case R.id.nav_button_one:
fragment = new RadioFragment();
fragment.setRetainInstance(true);
tag = "radio_fragment";
break;
case R.id.nav_button_two:
fragment = new StreamFragment();
fragment.setRetainInstance(true);
tag = "stream_fragment";
break;
case R.id.nav_button_three:
fragment = new InfoFragment();
fragment.setRetainInstance(true);
tag = "info_fragment";
break;
}
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment, tag).commit();
return true;
}
});
}
@Override
public void sendStreamLink(String link) {
fragment =new StreamFragment();
fragment.setRetainInstance(true);
fragmentManager=getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_container, fragment,"stream_fragment").addToBackStack(null).commit();
getSupportFragmentManager().executePendingTransactions();
StreamFragment sf=(StreamFragment) getSupportFragmentManager().findFragmentByTag("stream_fragment");
sf.getUrl(link);
view = bottomNavigationView.findViewById(R.id.nav_button_two);
view.performClick();
}
}
RadioFragment (Frag dont je vous envoie des données)
import android.app.Activity;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.os.Bundle;
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;
/**
* Created by Tron on 1/5/2017.
*/
public class RadioFragment extends Fragment implements Button.OnClickListener {
Button buttonman;
View rootView;
PushStreamLink pushStreamLink;
Activity a;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Activity) {
//a = (Activity) context;
}
if (context instanceof PushStreamLink) {
pushStreamLink = (PushStreamLink) context;
} else {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
public RadioFragment(){
};
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_player, container, false);
buttonman = (Button)rootView.findViewById(R.id.buttonman);
buttonman.setOnClickListener(this);
return rootView;
}
@Override
public void onClick(View v) {
/*Fragment fragment = new StreamFragment();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.main_container, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();*/
//((MainActivity)a).performStreamClick();
pushStreamLink.sendStreamLink("www.zz.com");
}
}
StreamFragment (frag auquel les données sont reçues, mais ne reçoit pas enregistré dans vue)
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
/**
* Created by Tron on 1/5/2017.
*/
public class StreamFragment extends Fragment {
String streamUrl="NoLinkFound";
TextView textView;
public StreamFragment(){};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_stream, container, false);
if(savedInstanceState==null)
{
}
else
{
streamUrl=savedInstanceState.getString("CurrentStreamLink");
textView =(TextView) getActivity().findViewById(R.id.streamLinkTextView);
textView.setText(streamUrl);
}
return view;
}
@Override
public void onSaveInstanceState(Bundle outState){
outState.putString("CurrentStreamLink",streamUrl);
super.onSaveInstanceState(outState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
if (streamUrl!=null) {
// streamUrl = savedInstanceState.getString("CurrentStreamLink");
textView = (TextView) getActivity().findViewById(R.id.streamLinkTextView);
textView.setText(streamUrl);
}
super.onActivityCreated(savedInstanceState);
}
public void getUrl(String data)
{
streamUrl=data;
if (streamUrl!=null)
{
textView=(TextView) getActivity().findViewById(R.id.streamLinkTextView);
textView.setText(streamUrl);
}
}
}
certains peuvent me s'il vous plaît aider? –