Ich habe eine RecyclerView, die viele Karten hat, die 4 EditText
halten. Wenn ich Werte in einen EditText einer Karte eingabe, füllt es den gleichen Wert in zufälligen Karten. Überraschenderweise springt EditTexts zum Beispiel nicht:Android RecyclerView -Mehrere Edittext Änderung gleichzeitig
Wenn ich Werte in edittext1 von Karte 1 eingabe, würde es den gleichen Wert in edittext1 in card8 füllen und wenn ich den Wert in card8 ändere, wird der Wert zurück in card1 geändert. Könnte mir bitte jemand sagen, warum das passiert?
danken Ihnen im Voraus
Hier ist mein Code:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
public String[][] data = new String[30][4];
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public LinearLayout mCardView;
public ViewHolder(LinearLayout v) {
super(v);
mCardView = v;
}
}
// Provide a suitable constructor (depends on the kind of dataset)
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
// Create new views (invoked by the layout manager)
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
LinearLayout v = (LinearLayout) LayoutInflater.from(parent.getContext())
.inflate(R.layout.cards, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
final EditText txt = (EditText) holder.mCardView.findViewById(R.id.ip1_text);
final EditText txt2 = (EditText) holder.mCardView.findViewById(R.id.ip2_text);
final EditText txt3 = (EditText) holder.mCardView.findViewById(R.id.ip3_text);
final EditText txt4 = (EditText) holder.mCardView.findViewById(R.id.ip4_text);
txt.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
data[position][0] = s.toString();
Log.d("DATA" + position + "0", s.toString());
}
});
txt2.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
data[position][1] = s.toString();
Log.d("DATA" + position + "1", s.toString());
}
});
txt3.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
data[position][2] = s.toString();
Log.d("DATA" + position + "2", s.toString());
}
});
txt4.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
data[position][3] = s.toString();
Log.d("DATA" + position + "3", s.toString());
}
});
TextView t = (TextView) holder.mCardView.findViewById(R.id.serNo);
t.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
public String[][] getData() {
return data;
}
Und das ist meine Karte xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="1">
<!-- A CardView that contains a TextView -->
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="375dp"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:backgroundTint="#eeeeee"
card_view:cardCornerRadius="4dp">
<TextView
android:id="@+id/serNo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="number"
android:layout_margin="20dp"
android:textColor="@color/cardview_dark_background" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<EditText
android:id="@+id/ip1_text"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_alignParentLeft="true"
android:layout_marginTop="20dp"
android:background="@color/cardview_light_background"
android:inputType="number"
android:maxLength="2" />
<EditText
android:id="@+id/ip3_text"
android:layout_width="80dp"
android:layout_height="30dp"
android:layout_below="@+id/ip1_text"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:background="@color/cardview_light_background"
android:inputType="number"
android:maxLength="1" />
<EditText
android:id="@+id/ip2_text"
android:layout_width="100dp"
android:layout_height="30dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:layout_toRightOf="@+id/ip1_text"
android:background="@color/cardview_light_background"
android:inputType="number"
android:maxLength="2" />
<EditText
android:id="@+id/ip4_text"
android:layout_width="80dp"
android:layout_height="30dp"
android:layout_below="@+id/ip2_text"
android:layout_marginBottom="10dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="10dp"
android:layout_toRightOf="@+id/ip3_text"
android:background="@color/cardview_light_background"
android:inputType="number"
android:maxLength="1" />
</RelativeLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
Recycler Blick erinnern rezykliert die bestehende Ansicht (das heißt, wenn eine Ansicht erstellt wird, wird sie die vorhandene einmal wiederverwenden), also bessere Schreibbedingung zum Löschen von Text \ – Killer