Réglage de l'Adaptateur dans recyclerview
Je suis en train d'utiliser recyclerview et la configuration d'adaptateur, mais j'obtiens l'erreur :-
Pas d'adaptateur; ignorer mise en page
Donc, s'il vous plaît aider moi comment faire pour résoudre ce problème
public class FragmentTwo extends Fragment {
private AppAdapter mAppAdapter;
private ArrayList<Model> mModel;
@Bind(R.id.recycler_view)
RecyclerView recyclerView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_two, container, false);
ButterKnife.bind(this, v);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(mAppAdapter);
parseData();
return v;
}
private void parseData() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("url")
.addConverterFactory(GsonConverterFactory.create())
.build();
ReqInterface reqInterface = retrofit.create(ReqInterface.class);
Call<Model> call = reqInterface.getAdvanceData("france");
call.enqueue(new Callback<Model>() {
@Override
public void onResponse(Call<Model> call, Response<Model> response) {
Model model = response.body();
mModel = new ArrayList<Model>(Arrays.asList(model));
mAppAdapter = new AppAdapter(mModel);
recyclerView.setAdapter(mAppAdapter);
mAppAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<Model> call, Throwable t) {
}
});
}
}
Voici mon Recyclerview Adaptateur classe:-
public class AppAdapter extends RecyclerView.Adapter<AppAdapter.ViewHolder> {
private ArrayList<Model> mModel;
TextView highTemp;
public AppAdapter(ArrayList<Model> model) {
mModel = model;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView highTemp;
public ViewHolder(View view) {
super(view);
highTemp = (TextView) view.findViewById(R.id.card_view_tv_hightemp);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.fragment_two, viewGroup, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
viewHolder.highTemp.setText(String.valueOf(mModel.getName);
}
@Override
public int getItemCount() {
return mModel.size();
}
}
Merci d'avance
Vous devez vous connecter pour publier un commentaire.
Vous n'avez jamais initialiser la carte
mAppAdapter
il est donc nulle au moment de l'exécution. Il vous manque quelque chose commemAppAdapter = new AppAdapter(yourdata);
avant l'appel à
setAdapter
.Votre carte
mAppAdapter
n'est jamais initialisée c'est à dire qu'il est nul.Donc
recyclerView.setAdapter(mAppAdapter);
est le même querecyclerView.setAdapter(null);
de sorte que vous ne sont pas réellement jamais mettre un adaptateur!Rappelez-vous, pour initialiser les champs:
Changement
à
Vous ne créez jamais de votre
mAppAdapter
.Pour résoudre ce problème, créez une nouvelle instance de votre carte et le passer dans les paramètres de
.setAdapter
.En d'autres termes, vous devez utiliser
.setAdapter(new AppAdapter(...))
où...
est remplacé par les paramètres que vous avez créés dansAppAdapter
.J'ai l'habitude de faire la rénovation d'appel dans un asynctask, puis, quand vous obtenez la réponse du serveur, vous créez une nouvelle carte et la placer à l'recyclerview.
De toute façon, essayez de la supprimer .setAdapter ligne dans le onCreate() la méthode et juste le laisser comme il est.
Il travaille et il ne plante pas, la raison pour laquelle il se bloque, c'est parce que la carte est nulle (il n'a pas d'éléments).
J'espère que cela aide!