Wenn wir den Wert in Zeile 1 eingeben, erscheint der in Zeile 1 eingegebene Wert wieder in Zeile 6, wenn wir zu der Zeile 6 blättern. Bitte beachten Sie den folgenden Code und den Rat.Text in Listview Custom Adapter bearbeiten Verliert seine Position beim Scrollen? - C# - Xamarin.Android
namespace Kites
{
public class Marks
{
// add any if you need more
public string StudentName { get; set; }
public string MarksScored { get; set; }
}
public class TEXTCHECK
{
public int POS { get; set; }
public string Value { get; set; }
}
public class MarksListViewAdapter : BaseAdapter<Marks>
{
private List<Marks> mstuduentmarks;
private List<TEXTCHECK> abc = new List<TEXTCHECK>();
private Context mcontext;
public MarksListViewAdapter (Context context, List<Marks> stud)
{
mstuduentmarks = stud;
mcontext = context;
}
public override int Count
{
get
{
return mstuduentmarks.Count;
// return mattendence.Count;
}
}
public override long GetItemId (int position)
{
return position;
}
public override Marks this[int position]
{
get
{
return mstuduentmarks [position];
// return mattendence [position];
}
}
class ViewHolder : Java.Lang.Object
{
public EditText comsevin;
public TextView namenmn;
}
public override View GetView (int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
View view = convertView;
if (view == null) // otherwise create a new one
{
view = LayoutInflater.From(mcontext).Inflate(Resource.Layout.listview_Marks, null, false);
holder = new ViewHolder();
holder.comsevin = view.FindViewById<EditText>(Resource.Id.editTextTeacherMarks);
holder.namenmn = view.FindViewById<TextView>(Resource.Id.textStudentNameTeacherMarks);
holder.namenmn.Tag = position;
view.Tag = holder;
}
else
{
holder = (ViewHolder)view.Tag;
}
holder.namenmn.Text = mstuduentmarks[position].StudentName;
int pos = (int)holder.namenmn.Tag;
holder.comsevin.TextChanged += (sender, e) =>
{
abc[pos].Value = holder.comsevin.Text;
};
//TextView txtStudent =
//txtStudent.Text = mstuduentmarks[position].StudentName;
//txtMarks.FocusChange += (object sender, View.FocusChangeEventArgs e) =>
//{
// //txtMarks.RequestFocusFromTouch();
// mstuduentmarks[position].MarksScored = txtMarks.Text;
//};
holder.comsevin.BeforeTextChanged += (sender, e) =>
{
abc.Add(new TEXTCHECK { POS = position, Value = mstuduentmarks[position].MarksScored });
};
holder.comsevin.AfterTextChanged += (sender, e) =>
{
int a = abc[pos].POS;
mstuduentmarks[pos].MarksScored = abc[pos].Value;
};
//txtMarks.Tag = position;
//txtMarks.TextChanged += TxtMarks_TextChanged;
return view;
}
//void TxtMarks_TextChanged (object sender, Android.Text.TextChangedEventArgs e)
//{
// EditText txtMarks = (EditText)sender;
// //var position = (int)txtMarks.Tag;
//}
}
}
Wenn wir geben Wert in Zeile 1 der in Zeile eingegeben Wert 1 erscheint 6 in Reihe zurück, wenn wir in die Zeile scrollen 6. Bitte beachten Sie den Code unten und Beratung.
@Harsh die aktualisierte Antwort zu überprüfen, so dass Sie verstehen, was schief gelaufen ist;) – HenriqueMS
Vielen Dank für Ihre Hilfe und Verständnis über meine Frage, Eigentlich habe ich versucht, direkt den Positionswert verwenden, aber immer noch ich bin das gleiche Problem bekommen. –
@HarshBakshi du bist willkommen, ich glaube, dass überall, wo Sie die Variable "pos" verwenden Sie einen schmutzigen Wert bekommen, können Sie die Deklaration der Variablen löschen und überprüfen, dass überall "pos" Sie es in "Position ändern "? Sorry für das Bestehen, das ist wirklich leicht zu vergessen, und das ist genug für eine schlechte Bind – HenriqueMS