एक लंबे समय के बाद मैं एक recylcerview का उपयोग करने का प्रयास कर रहा हूं और जब मैं onBindViewHolder मेथोड उत्पन्न कर रहा हूं, तो यह एक धारक के रूप में RecyclerView.ViewHolder का उपयोग कर रहा है। लेकिन टेक्स्टव्यू एमएफएच पर धारक का उपयोग करने के लिए, मुझे अपने व्यूहोल्डर का उपयोग करने की ज़रूरत है, जिसे मैंने नीचे बनाया है।


    private ArrayList<DatenItem> mDatenList;

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.daten_item, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        DatenItem datenItem = mDatenList.get(position);

        holder.mFach.setText(datenItem.getmFach());    //both not possible because mfach and mDatum doesnt exist (it is red)
        holder.mDatum.setText(datenItem.getmDate());
    }

    @Override
    public int getItemCount() {
        return mDatenList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView mFach;
        private final TextView mDatum;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            mFach = itemView.findViewById(R.id.fachView);
            mDatum = itemView.findViewById(R.id.datumView);
        }
    }
}```

btw i deleted the unnecessary parts of the code in the code above
0
DerPizzaBoi 29 जिंदा 2020, 23:23

2 जवाब

सबसे बढ़िया उत्तर

समस्या यह है कि आप गलत सामान्य प्रकार का उपयोग करते हैं। आधार एक के बजाय अपने व्यूहोल्डर का उपयोग करने के लिए आपको अपने एडेप्टर घोषणा और संबंधित कार्यों को बदलने की जरूरत है:

class YourAdapter() : RecyclerView.Adapter<YourAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YourAdapter.ViewHolder 
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    }
}
1
Bracadabra 30 जिंदा 2020, 01:04

मुझे लगता है क्योंकि 'mFach' और 'mDatum' निजी हैं, आप ऐसा नहीं कर सकते। आप इस नमूना कोड का उपयोग onBindViewHolder में भी कर सकते हैं:

   public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) 
    {
       DatenItem datenItem = mDatenList.get(position);

       holder.fill(datenItem);
    }

और अपने व्यू होल्डर को इस तरह बदलें:

public static class ViewHolder extends RecyclerView.ViewHolder {
private final TextView mFach;
private final TextView mDatum;
public ViewHolder(@NonNull View itemView)
{
    super(itemView);
    mFach = itemView.findViewById(R.id.fachView);
    mDatum = itemView.findViewById(R.id.datumView);
}

public void fill(DatenItem datenItem)
{
    holder.mFach.setText(datenItem.getmFach());
    holder.mDatum.setText(datenItem.getmDate());
}}
0
SINA 29 जिंदा 2020, 23:54