Я новичок ie в android разработке. У меня есть 3 фрагмента с именами Il, Ilce, AdresFragment. У фрагментов Ilce и Ilce есть recylerview для отображения элементов, а также есть макет строки для элементов recylerview. Макет AdresFragment имеет 2 textview который показывает данные, возвращенные Il и Ilce Fragments.AdresFragment, как показано на рисунке. AdresFragment Когда вы переходите к IlFragment и выбираете из него элемент, затем go назад к AdresFragment, это выглядит как этот . Проблема возникает, когда вы переходите к IlceFragment выберите элемент из него и снова вернитесь в AdresFragment, мое текстовое представление Il исчезает, и AdresFragment выглядит как этот . Я передаю данные между фрагментами, используя связки.
public class AdresFragment extends Fragment {
Fragment fragment=null;
RelativeLayout ilRelative,ilceRelative;
TextView ilView,ilceView,mahalleView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_adres,container,false);
ilView=v.findViewById(R.id.ilView);
ilceView=v.findViewById(R.id.ilceTextView);
mahalleView=v.findViewById(R.id.mahalleView);
ilRelative=v.findViewById(R.id.ilSecimi);
ilceRelative=v.findViewById(R.id.ilceSecimi);
savedInstanceState=this.getArguments();
if(savedInstanceState!=null) {
String il = savedInstanceState.getString("il");
ilView.setText(il);
String ilce=savedInstanceState.getString("ilce");
ilceView.setText(ilce);
}
return v;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
ilRelative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragment=new Il();
replaceFragment(fragment);
}
});}
public void replaceFragment(Fragment someFragment) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.ilanBody, someFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
Вышеуказанный фрагмент кода принадлежит AdresFragment, а ниже - IlFragment
public class Il extends Fragment{
RecyclerView recyclerView;
RelativeLayout relativeLayout;
private List<ListItem> listItems;
MyAdapter myAdapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_il,container,false);
} @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
relativeLayout=(RelativeLayout)getView().findViewById(R.id.relativeRow);
recyclerView=(RecyclerView)getView().findViewById(R.id.ilRecyle);
recyclerView.setHasFixedSize(true);
listItems=new ArrayList<>();
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
loadRecylerData();
}
private void loadRecylerData(){
final ProgressDialog progressDialog=new ProgressDialog(getActivity());
progressDialog.setMessage("Loading data....");
progressDialog.show();
StringRequest stringRequest=new StringRequest(Request.Method.GET,
URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
progressDialog.dismiss();
try {
JSONArray jsonArray=new JSONArray(response);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject=jsonArray.getJSONObject(i);
ListItem item=new ListItem(
new String(jsonObject.getString("province").getBytes("ISO-8859-1"),"UTF-8"));
listItems.add(item);
}
myAdapter=new MyAdapter(getActivity().getApplicationContext(),listItems);
recyclerView.setAdapter(myAdapter);
myAdapter.notifyDataSetChanged();
myAdapter.setOnItemClickListner(new MyAdapter.onItemClickListner() {
@Override
public void onClick(String str) {
String il=str;
AdresFragment adresFragment=new AdresFragment();
Bundle args=new Bundle();
args.putString("il",il);
adresFragment.setArguments(args);
getFragmentManager().beginTransaction().add(R.id.ilanBody,adresFragment).commit();
}
});
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
progressDialog.dismiss();
Toast.makeText(getActivity(),error.getMessage(),Toast.LENGTH_LONG).show();
}
});
RequestQueue requestQueue= Volley.newRequestQueue(getActivity());
requestQueue.add(stringRequest);
}
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private Context context;
private List<ListItem> listItems;
onItemClickListner onItemClickListner;
public void setOnItemClickListner(MyAdapter.onItemClickListner onItemClickListner) {
this.onItemClickListner = onItemClickListner;
}
public interface onItemClickListner{
void onClick(String str);
}
public MyAdapter(Context context, List<ListItem> listItems) {
this.context = context;
this.listItems = listItems;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.recylerview_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final ListItem listItem = listItems.get(position);
holder.myTextView.setText(listItem.getIl());
holder.relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListner.onClick(listItem.getIl());
}
});
}
public String getItem(int position){
return listItems.get(position).getIl();
}
@Override
public int getItemCount() {
return listItems.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public RelativeLayout relativeLayout;
TextView myTextView;
MyViewHolder(View itemView) {
super(itemView);
myTextView = itemView.findViewById(R.id.ilTextView);
relativeLayout=(RelativeLayout)itemView.findViewById(R.id.relativeRow);
}
}
Я хочу сохранить обе данные.
Заранее спасибо!