Ich habe eine benutzerdefinierte Listenansicht, die zum Füllen einer Liste verwendet wird, so dass jedes Element seinen eigenen editiertext hat. Wenn ich auf sie klicke und einen Wert eintippe, und danach die Soft-Tastatur (kleiner nach unten zeigender Pfeil in der linken unteren Ecke der Tastatur) verberge, verliert der Editiertext den eingegebenen Text.Android benutzerdefinierte ListView - Edittext wird gelöscht, wenn die Soft-Tastatur versteckt
Warum und wie kann ich das verhindern?
Danke!
Der Code des Adapters:
public class CompetitorResultWeightListAdapter extends ArrayAdapter<Competitor> {
Helper helper = new Helper(getContext());
private DatabaseReference databaseResult;
private Activity context;
private List<Competitor> competitorList;
private WodResult wodResult;
public CompetitorResultWeightListAdapter(Activity context, List<Competitor> competitorList) {
super(context, R.layout.competitor_result_weight_list_layout, competitorList);
this.context = context;
this.competitorList = competitorList;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
helper.logD("in CompetitorResultWeightListAdapter - getView");
databaseResult = FirebaseDatabase.getInstance().getReference("Competitions").child(helper.getsCompetitionID())
.child("Wods").child(helper.getsWodID()).child("Results");
LayoutInflater layoutInflater = context.getLayoutInflater();
convertView = layoutInflater.inflate(R.layout.competitor_result_weight_list_layout, null, true);
final ViewHolder viewHolder = new ViewHolder();
TextView tvCompetitorListName = (TextView) convertView.findViewById(R.id.tvCompetitorListName);
TextView tvCompetitorListNumber = (TextView) convertView.findViewById(R.id.tvCompetitorListNumber);
viewHolder.etWeight = (EditText) convertView.findViewById(R.id.etCompetitorResultWeight);
viewHolder.btnSaveResult = (ImageButton) convertView.findViewById(R.id.btnCompetitorResultRepeat);
convertView.setTag(viewHolder);
Competitor competitor = competitorList.get(position);
tvCompetitorListName.setText(competitor.getCompetitorName());
tvCompetitorListNumber.setText("Rajtszám: " + competitor.getCompetitorNumber());
//viewHolder.etWeight.setHint("működik");
//etCompetitorResultWeight.setInputType(InputType.TYPE_NULL);
//etCompetitorResultWeight.setTextIsSelectable(true);
viewHolder.btnSaveResult.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
viewHolder.etWeight.setHint(viewHolder.etWeight.getText() + " kg");
helper.logD("Edittext text at position " + position + ": " + viewHolder.etWeight.getText().toString().trim());
helper.setsCompetitorID(getItem(position).getCompetitorID());
addWodResult(getItem(position).getCompetitorID(),
getItem(position).getCompetitorName(),
viewHolder.etWeight.getText().toString().trim());
}
});
return convertView;
}
private void addWodResult(String id, String name, String result) {
helper.logD("in addWodResult");
helper.logD("id: " + id + ", name: " + name + ", result: " + result);
wodResult = new WodResult(id, name, result);
databaseResult.child(helper.getsCompetitorID()).setValue(wodResult).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
helper.makeToast(getContext().getResources().getString(R.string.wod_result_data_saved), helper.toastShort);
//viewHolder.btnRepeatResult.setBackgroundColor(Color.GREEN);
} else {
helper.makeToast(getContext().getResources().getString(R.string.firebase_data_stored_error), helper.toastShort);
}
}
});
}
public class ViewHolder {
EditText etWeight;
ImageButton btnSaveResult;
}
}
Sie verwendet haben der 'ViewHolder', scheint es als hättest du nicht. – samirk433
Nein, habe ich nicht. Ich ändere es und gebe Ihnen ein Update, danke. – lpasztor
Das Gleiche mit Viewholder. Ich bearbeite die Frage und füge den Code hinzu. Überprüfen Sie bitte das. – lpasztor