Вернуться от действия к фрагменту из другого действия - PullRequest
0 голосов
/ 12 января 2019

У меня есть 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

Задание 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...