如何修复片段重叠?

我只在 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) {




MM们
浏览 122回答 2
2回答

一只斗牛犬

请在您的情况下使用替换而不是添加SearchFragment&nbsp;searchFragment&nbsp;=&nbsp;new&nbsp;SearchFragment(MainActivity.this); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchFragment.setArguments(extra); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentTransaction&nbsp;=&nbsp;manager.beginTransaction(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentTransaction.replace(R.id.myFragmwent_layout,searchFragment,"first"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentTransaction.addToBackStack(null); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fragmentTransaction.commit();

12345678_0001

FragmentTransaction.add()将多个片段添加到容器中,它们将一个层叠在另一个之上。如果您的片段具有透明背景,您将看到此效果并且能够同时与多个片段进行交互。如果您使用FragmentTransaction.replace(R.id.container,fragment)它,它将删除容器中已有的所有片段,并将新片段添加到同一容器中。所以你需要修改你的代码并使用fragmentTransaction.replace而不是fragmentTrasaction.addSearchFragment searchFragment = new SearchFragment(MainActivity.this);searchFragment.setArguments(extra);fragmentTransaction = manager.beginTransaction();fragmentTransaction.replace(R.id.myFragmwent_layout,searchFragment,"first");fragmentTransaction.addToBackStack(null);fragmentTransaction.commit();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java