Ich habe zwei Layout-Dateien unten gezeigt.Layout-Bildschirm in Laufzeit ändern mit RecyclerView-Adapter
Wenn Daten in der Liste vorhanden sind, dann zeige ich dieses Layout.
und wenn die Liste leer ist, dann zeige ich dieses Layout.
Nun wollte ich das Layout zur Laufzeit ändern. Wenn der Benutzer den letzten Eintrag aus der Liste löscht, wollte ich das Layout in 'leeres Einkaufswagenlayout' ändern, das im zweiten Bild angezeigt wird.
In getItemCount()
Methode der RecyclerView Adapter, wenn die Liste leer oder null ist, dann kehre ich als 1
zählen sonst kehre ich list.size()
Dies ist mein Adapter Code.
public class CheckOutAdapter extends RecyclerView.Adapter<CheckOutAdapter.ViewHolder> {
public ArrayList<Design> designList;
private Context context;
private LayoutInflater layoutInflater;
public CheckOutAdapter(Context context, ArrayList<Design> designList) {
this.designList = designList;
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(designList.isEmpty() || designList == null || designList.size() == 0) {
View view = layoutInflater.inflate(R.layout.empty_cart, parent, false);
return new ViewHolder(view);
} else {
View view = layoutInflater.inflate(R.layout.checkout_single_design, parent, false);
return new ViewHolder(view);
}
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final Design design = designList.get(position);
holder.tvQuality.setText(design.qualityName);
holder.tvDesign.setText(design.designName);
holder.tvShade.setText(design.name);
holder.tvAmount.setText("₹ " + design.amount);
Picasso.with(context).load(design.image).into(holder.ivDesign);
if (design.pcs != 0) {
holder.btPcsCount.setText(Integer.toString(design.pcs));
}
holder.ivDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openDialog(design);
}
});
//other ClickListeners.
}
@Override
public int getItemCount() {
if (designList == null || designList.isEmpty() || designList.size() == 0) {
return 1;
} else {
return designList.size();
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public LinearLayout llPer;
public Button btPlus, btMinus, btPcsCount, btAddCart;
public ImageView ivDesign, ivDelete;
public TextView tvDesign, tvQuality, tvShade, tvAmount, tvDiscAmt, tvDisPer;
public ViewHolder(View itemView) {
super(itemView);
llPer = (LinearLayout) itemView.findViewById(R.id.llPer);
btPlus = (Button) itemView.findViewById(R.id.btPlus);
//other findViewByIds
}
}
public void openDialog(final Design design) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Confirm");
builder.setMessage("Remove item from cart?");
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
designList.remove(design);
notifyDataSetChanged();
saveSharedPref(context, "cart", new Gson().toJson(designList));
Toast.makeText(context, "deleted", Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Ich bin immer in der Nähe von Nullpointer onBindViewHolder
. Ich weiß nicht, warum es abgestürzt ist. Bitte geben Sie Vorschläge.
Sie müssen getItemViewType überschreiben, um Laufzeitlayout zu setzen –