MainActivity代码:

public class MainActivity extends AppCompatActivity implements OnColorButtonListener {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }



    @Override

    public void onColorClick(int color) {

        Fragment fragment = null;

        switch (color) {

            case 0:

                fragment = new RedFragment();

                break;

            case 1:

                fragment = new BlueFragment();

                break;

        }

         getSupportFragmentManager().beginTransaction()

                .replace(R.id.fragment_ex, fragment).commit();

    }

}


RedFragment代码:

public class RedFragment extends Fragment implements FlowerAdapter.FlowerClickListener {



    private SwipeRefreshLayout swipeContainer_red;

    private RecyclerView mRecyclerView;

    private RestManager mRestManager;

    private FlowerAdapter mFlowerAdapter;



    @Nullable

    @Override

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_red, null);

        swipeContainer_red = (SwipeRefreshLayout) view.findViewById(R.id.swipeContainer_red);

        swipeContainer_red.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

            @Override

            public void onRefresh() {

                mRestManager = new RestManager();

                Call<List<Flower>> listCall = mRestManager.getmFlowerApiService(getActivity()).getAllFlowers();

                listCall.enqueue(new Callback<List<Flower>>() {

                    @Override

                    public void onResponse(Call<List<Flower>> call, Response<List<Flower>> response) {

                        if (response.isSuccessful()) {

                            mFlowerAdapter.clear();

                            List<Flower> flowerList = response.body();

                            for(int i =0; i<flowerList.size(); i++) {

                                Flower flower = flowerList.get(i);

                                mFlowerAdapter.addFlower(flower);

                            }

                            swipeContainer_red.setRefreshing(false);

                        }

                    }

                    @Override

                    public void onFailure(Call<List<Flower>> call, Throwable t) {

                    }

                });



            }

        });

        configViews(view);



        return view;

    }



    private void configViews(View view) {

        mRecyclerView = (RecyclerView) view.findViewById(R.id.rv_flower_red);

        mRecyclerView.setHasFixedSize(true);

        mRecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());

        mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity().getApplicationContext(), 3));

        mFlowerAdapter = new FlowerAdapter(this);

        mRecyclerView.setAdapter(mFlowerAdapter);

    }

    @Override

    public void onClick(int position) {

    }

}


当我阅读RedFragment的内容时,我转到蓝色的Fragment,然后回到RedFragment,RedFragment丢失了以前在RedFragment上的所有内容。

我希望当我跳下另一个Fragment时RedFragment不会被更改。



当我看到其他碎片时如何使RedFragment设置不变?

编辑//RowFragment.java

public class RowFragment extends Fragment implements View.OnClickListener {

    private OnColorButtonListener onColorButtonListener;
    public RowFragment() {
    }
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        onColorButtonListener = (OnColorButtonListener) context;
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_row, container, false);
        view.findViewById(R.id.v_red).setOnClickListener(this);
        view.findViewById(R.id.v_blue).setOnClickListener(this);
        return view;
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.v_red:
                onColorButtonListener.onColorClick(0);
                break;

            case R.id.v_blue:
                onColorButtonListener.onColorClick(1);
                break;
        }


我修改的代码:MainActivity的onColorClick方法

@Override
public void onColorClick(int color) {

    Fragment frag = null;
    switch (color) {
        case 0:
            frag = getSupportFragmentManager().findFragmentByTag("red");
            if(frag==null){
                frag=new RedFragment();
                getSupportFragmentManager().beginTransaction().add(R.id.fragment_ex, frag, "red").commit();
            }
            break;
        case 1:
            frag = getSupportFragmentManager().findFragmentByTag("blue");
            if(frag==null){
                frag=new BlueFragment();
                getSupportFragmentManager().beginTransaction().add(R.id.fragment_ex, frag, "blue").commit();
            }
            break;
    }
        getSupportFragmentManager().beginTransaction().show(frag).commit();

    }


但是该代码存在问题,当第一次单击时,它可以正常工作,但是第二次单击相同的颜色,它将不再起作用。我应该怎么解决呢?

最佳答案

而不是每次尝试newFragment

Fragment frag=getSupportFragmentManager().findFragmentByTag(TAG);
if(frag==null){
 frag=new Fragment();
}


在添加片段时,请指定一个标签,以便以后可以重新访问并重新访问。

您也可以使用setRetainInstance方法,并在onCreate中设置内容。

10-08 18:27