Ich implementiere eine excel-ähnliche Tabelle mit Recyclerview wie folgt:
< /p>
Die Recyclerview ist mit einer Scrollview verpackt, da die Anforderung nur der Recyclerview ist, der scrollbar ist, nicht die gesamte Aktivität. Es gibt jedoch 2 Probleme: < /p>
Say, ich geben nur Werte für Kalbe's Aktivität und Bemerkungen ein. Wenn die Recycler -Ansicht nach unten scrolliert wird und erneut nach oben geht, sind diese Werte verschwunden. Zum Scrollen, beispielsweise die ersten 2 Zeilen, funktioniert dieser Code nicht wie erwartet: < /p>
for (int x = 0; x < uiBinding.rvCompetitor.getChildCount(); x++){
View vv = uiBinding.rvCompetitor.getChildAt(x);
EditText edtActivity = (EditText) vv.findViewById(R.id.edtActivity);
EditText edtRemarks = (EditText) vv.findViewById(R.id.edtRemarks);
EditText edtCompany = (EditText) vv.findViewById(R.id.edtCompany);
//
// save the inputs from those EditText to ArrayList and submit
allData.add(new PromoItem(edtCompany.getText().toString(), edtActivitygetText().toString(), edtRemarks.getText().toString());
//
//
< /code>
} < /p>
< /li>
< /ol>
Meine Erwartung ist uibinding.rvCompetitor.getChildCount () < /Code> Gibt 10 zurück (die gesamte Zeilenzahl). Dennoch gibt es 8 zurück. Das bedeutet
< /code>
Das Datenmodell: < /p>
import com.google.gson.annotations.SerializedName;
public class PromoCompetitorItem {
@SerializedName("company_id")
public int companyId;
@SerializedName("company_name")
public String companyName;
@SerializedName("activity")
public String activity;
@SerializedName("remarks")
public String remarks;
public boolean readOnly = false;
public PromoCompetitorItem(int id, String name, String activity, String remarks){
this.companyId = id;
this.companyName = name;
this.activity = activity;
this.remarks = remarks;
}
}
< /code>
und der Adapter: < /p>
public class CompetitorAdapter extends RecyclerView.Adapter {
private List
data;
private Context ctxt;
public CompetitorAdapter(Context ctxt){
this.ctxt = ctxt;
this.data = new ArrayList();
}
public void updateData(List newData){
data.clear();
data.addAll(newData);
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View viewItem = inflater.inflate(R.layout.item_promo_competitor, parent, false);
ViewHolder holder = new ViewHolder(viewItem);
return holder;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
PromoCompetitorItem item = data.get(position);
holder.uiBinding.tvNo.setText(""+(position+1));
holder.uiBinding.edtCompany.setText(item.companyName);
if (item.readOnly) holder.uiBinding.edtCompany.setEnabled(false);
else holder.uiBinding.edtCompany.setEnabled(true);
if (item.activity == null) holder.uiBinding.edtActivity.setText("");
else holder.uiBinding.edtActivity.setText(item.activity);
if (item.remarks == null) holder.uiBinding.edtRemarks.setText("");
else holder.uiBinding.edtRemarks.setText(item.remarks);
}
@Override
public int getItemCount() {
if (data == null) return 0;
else return data.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ItemPromoCompetitorBinding uiBinding;
public ViewHolder(View view){
super(view);
uiBinding = ItemPromoCompetitorBinding.bind(view);
}
}
}
< /code>
Wenn ich das Aktivitätslayout ändere, wickle ScrollView das gesamte Layout (nicht das Recyclerview), dann überhaupt kein Problem. Wie repariere ich das?
So "bestehen" Daten/Ansicht, während Sie Recyclerview scrollen ⇐ Android
-
- Similar Topics
- Replies
- Views
- Last post