2016-09-19 1 views
0

Ich habe ein zwei Fragment auf MainActivity.Warum dieser Fehler passiert ist, der gleiche Code, aber verschiedene Fragmente, Recyclerview, Retrofit2

Zuerst 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); 
    } 
} 

Zweitens RedFragment (es ist alles das Gleiche mit YellowFragment, aber swipeContainer_yellow, rv_flower_yellow, LinearLayoutManager geändert 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); 
    } 
} 

Aber in RedFragment ,

enter image description here

Warum ist das passiert?

Ein Teil von 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); 
    } 
} 

Ich versuchte zunächst zwei Fragmente mit den gleichen Daten zu machen (die von meinem RESTapi Server mit retrofit2 ist gekommen) nur auf andere Sicht (Gridlayout und Linearlayout).

Aber ich gab es auf. Weil es mir zu schwer schien.

Wenn es eine gute Möglichkeit gibt, von meinem ersten Versuch abhängig zu sein, wäre ich sehr dankbar.

Wie auch immer, warum ist dieser Fehler passiert?

Bitte lassen Sie mich wissen Hinweis.

Antwort

2

Sie haben FlowerClickListener Schnittstelle in RedFragment Fragment wie

public class RedFragment extends Fragment implements FlowerAdapter.FlowerClickListener{ 
+0

Vielen Dank U Rahul Sharma –

2

Auf jeden Fall implementieren, warum dieser Fehler passiert ist?

weil this kein FlowerClickListener ist. Die Unterklasse Ihres Fragments sollte die Schnittstelle FlowerClickListener implementieren, wenn Sie dies als Delegat dafür verwenden möchten.

+0

Danke Blackbelt! –

Verwandte Themen