0

I have a two fragment on MainActivity.

First, YellowFragment

public class YellowFragment extends Fragment implements FlowerAdapter.FlowerClickListener{

    private SwipeRefreshLayout swipeContainer_yellow;

    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_yellow, container, false);

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

        swipeContainer_yellow.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_yellow.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_yellow);
        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
        mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.VERTICAL, false));
        mFlowerAdapter = new FlowerAdapter(this);
        mRecyclerView.setAdapter(mFlowerAdapter);
    }
}

Second, RedFragment (it's all the same with YellowFragment, but swipeContainer_yellow, rv_flower_yellow,LinearLayoutManager changed to swipeContainer_red, rv_flower_red, GridLayoutManager)

public class RedFragment extends Fragment {

    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); #Here is problem
        mRecyclerView.setAdapter(mFlowerAdapter);
    }
}

But in RedFragment,

enter image description here

Why this happend?

Some part of FlowerAdpater

public class FlowerAdapter extends RecyclerView.Adapter<FlowerAdapter.Holder> {
    public FlowerAdapter(FlowerClickListener listener) {
        mFlowers = new ArrayList<>();
        mListener = listener;
    }
    public interface FlowerClickListener {
        void onClick(int position);
    }
}

I first tried to make two fragment having the same data(which is came from my RESTapi server using retrofit2) just on different view (Gridlayout and Linearlayout).

But i gave it up. Because it seemed too hard for me.

If there is a good way of depending on my first trying, i would be very thanks.

Anyway, why that error happened?

Please let me know hint.

H.fate
  • 644
  • 2
  • 7
  • 18

2 Answers2

2

you have to implement FlowerClickListener interface in RedFragment fragment like

public class RedFragment extends Fragment implements FlowerAdapter.FlowerClickListener{
Rahul Sharma
  • 12,515
  • 6
  • 21
  • 30
2

Anyway, why that error happened?

because this is not a FlowerClickListener. Your Fragment's subclass should implement the FlowerClickListener interface if you want to use this as delegate for it.

  public class RedFragment extends Fragment implements FlowerClickListener {
Blackbelt
  • 156,034
  • 29
  • 297
  • 305