Как я могу исправить наложение фрагментов? - PullRequest
0 голосов
/ 27 июня 2019

Я создал динамически только один фрагмент в Activity и добавил данные к фрагменту.Когда я изменил свой фрагмент данных снова создан.Когда я захочу вернуться к активности, они отобразят первые предыдущие данные, а затем перейдут в Основную активность, когда я нажму кнопку «Назад».Как решить эту проблему, когда я нажимаю кнопку «назад», они переходят только к основной деятельности, а не к предыдущим данным.

 SearchFragment searchFragment = new SearchFragment(MainActivity.this);
                searchFragment.setArguments(extra);
                fragmentTransaction = manager.beginTransaction();
                fragmentTransaction.add(R.id.myFragmwent_layout,searchFragment,"first");
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
 SearchFragment searchFragment = (SearchFragment) 
 manager.findFragmentByTag("first");
                fragmentTransaction = manager.beginTransaction();
                if (searchFragment!=null){
                    fragmentTransaction.remove(searchFragment);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();
                }

Класс фрагмента поиска

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        if (getArguments()!=null){
            keyword = getArguments().getString("keyword");
        }
        View view;
        view = inflater.inflate(R.layout.fragment_search, container, false);
        mRecyclerView = view.findViewById(R.id.recycler_view_Frag);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        categoryItemArrayList = new ArrayList<>();

        sQueue = Volley.newRequestQueue(getContext());
        JsonArrayRequest arrayRequest = new JsonArrayRequest(Request.Method.POST, url+keyword,
                null,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        try {
                            for (int i = 0; i < response.length(); i++) {
                                JSONObject data = response.getJSONObject(i);
                                String creatorName = data.getString("name");
                                String imageUrl = data.getString("image");
                                String articleId = data.getString("article_id");
                                categoryItemArrayList.add(new CategoryItem(imageUrl, creatorName, articleId));
                            }
                            mCustomadapter = new CustomAdapter(getContext(), categoryItemArrayList);
                            mRecyclerView.setAdapter(mCustomadapter);
                            mCustomadapter.setOnItemClickListener(SearchFragment.this);
                            mCustomadapter.updateData();
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Toast.makeText(getContext(), "data not found", Toast.LENGTH_SHORT).show();
                error.printStackTrace();
            }
        });
        sQueue.add(arrayRequest);

        return view;
    }

Ответы [ 2 ]

1 голос
/ 27 июня 2019

FragmentTransaction.add() добавляет несколько фрагментов в контейнер, и они будут наслоены друг на друга.Если ваши фрагменты имеют прозрачный фон, вы увидите этот эффект и сможете взаимодействовать с несколькими фрагментами одновременно.

Если вы используете FragmentTransaction.replace(R.id.container,fragment), он удалит все фрагменты, которые уже находятся в контейнере, идобавьте новый в тот же контейнер.

Поэтому вам нужно изменить код и использовать fragmentTransaction.replace вместо fragmentTrasaction.add

SearchFragment searchFragment = new SearchFragment(MainActivity.this);
searchFragment.setArguments(extra);
fragmentTransaction = manager.beginTransaction();
fragmentTransaction.replace(R.id.myFragmwent_layout,searchFragment,"first");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
1 голос
/ 27 июня 2019

Пожалуйста, используйте заменить вместо добавления в вашем случае

SearchFragment searchFragment = new SearchFragment(MainActivity.this);
                searchFragment.setArguments(extra);
                fragmentTransaction = manager.beginTransaction();
                fragmentTransaction.replace(R.id.myFragmwent_layout,searchFragment,"first");
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...