У меня есть 3 действия, у упражнения A есть 3 фрагмента, один из которых перекрывает другой, и во всех них у меня есть просмотр списка. Каков наилучший способ сделать точный возврат следующего пути: Действие A вызывает ListView из фрагмента A, который вызывает ListView из фрагмента B, который вызывает ListView из фрагмента C, который, в свою очередь, вызывает действие B. Когда я нажимаю кнопку возврата в Деятельности B, я хотел бы, чтобы она вернулась к тому же ListView, что и Fragment C, который возвращает тот же ListView, что и Fragment B .... и так далее. Обратное путешествие в Деятельности A от Фрагмента A к C я могу сделать с addToBackStack (null)
, но из Деятельности B я могу вернуться только с OnBackPressed ()
к Деятельности A во Фрагменте A;
Может ли кто-нибудь дать мне решение этой проблемы?
Примечание: эти ListViews - это данные, которые я получаю из базы данных SQLite;
![enter image description here](https://i.stack.imgur.com/lmacF.jpg)
Задание A:
public class ActivityA extends AppCompatActivity {
private Context context;
private Fragment nFA;
//
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen);
context = getBaseContext();
//
nFA = new FragmentA();
//
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.ll_fragment, nFA, "f1name");
ft.commit();
}
public void onBackPressed() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
getSupportFragmentManager().popBackStack();
} else {
Intent mIntent = new Intent(context, MenuActivity.class);
startActivity(mIntent);
finish();
super.onBackPressed();
}
}
}
Фрагмент А:
public class FragmentA extends Fragment {
private ListView lv_fragment;
private View view;
private Fragment nFB;
private HMAuxN item;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment, container, false);
lv_fragment = view.findViewById(R.id.lv_fragment);
NDao nDao = new NDao(getContext());
//
MyAdapterData1 adapter = new MyAdapterData1(getContext(), R.layout.celula_listview_data, nDao.getListData1());
lv_fragment.setAdapter(adapter);
nFB = new FragmentB();
lv_fragment.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
item = (HMAuxN) parent.getItemAtPosition(position);
//
String data1 = (item.get(NDao.DATA1));
Bundle bundle = new Bundle();
bundle.putString("data1", data1);
nFB.setArguments(bundle);
//
FragmentManager fm = getFragmentManager();
FragmentTransaction ft;
if (fm != null) {
ft = fm.beginTransaction();
ft.replace(R.id.ll_fragment, nFB);
ft.addToBackStack(null);
ft.commit();
}
}
});
return view;
}
}
Фрагмент B:
public class FragmentB extends Fragment {
private ListView lv_fragment;
private View view;
private Fragment nFC;
private HMAuxN item;
String data2;
String data1;
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment, container, false);
lv_fragment = view.findViewById(R.id.lv_fragment);
NDao nDao = new NDao(getContext());
Bundle bundle = this.getArguments();
assert bundle != null;
data1 = bundle.getString("data1");
//
MyAdapterData2 adapter = new MyAdapterData2(getContext(), R.layout.celula_listview_data, nDao.getListData2(data1));
lv_fragment.setAdapter(adapter);
nFC = new FragmentC();
lv_fragment.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
item = (HMAuxN) parent.getItemAtPosition(position);
//
data2 = (item.get(NDao.DATA2));
Bundle bundle = new Bundle();
bundle.putString("data1", data1);
bundle.putString("data2", data2);
nFC.setArguments(bundle);
//
FragmentManager fm = getFragmentManager();
FragmentTransaction ft;
if (fm != null) {
ft = fm.beginTransaction();
ft.replace(R.id.ll_fragment, nFC);
ft.addToBackStack(null);
ft.commit();
}
}
});
return view;
}
}
Фрагмент C:
public class FragmentC extends Fragment {
private ListView lv_fragment;
private View view;
private Activity activity;
public void onAttach(Context context) {
super.onAttach(context);
activity = (Activity) context;
}
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment, container, false);
lv_fragment = view.findViewById(R.id.lv_fragment);
NDao nDao = new NDao(getContext());
Bundle bundle = this.getArguments();
assert bundle != null;
String data1 = bundle.getString("data1");
String data2 = bundle.getString("data2");
MyAdapter adapter = new MyAdapter(getContext(), R.layout.celula_listview_layout, nDao.getList(data1, data2));
lv_fragment.setAdapter(adapter);
lv_fragment.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
HMAuxN item = (HMAuxN) parent.getItemAtPosition(position);
//
Intent mIntent = new Intent(getContext(), ActivityB.class);
mIntent.putExtra("id", item.get(NDao.IDNOTAS));
startActivity(mIntent);
//
activity.finish();
}
});
return view;
}
}