Daten-Anzeige einer bestimmten Listen-Zeile dynamisch zur Laufzeit ändern



  • Hallo zusammen,

    mein Programm zeigt bei Ausführung einen Button sowie eine Tabelle mit 2 Spalten an. Bei Klick auf den Button möchte ich gerne einen speziellen Eintrag in dieser Tabelle ändern. Aber nur diesen einen. Alle anderen Einträge sollen so bleiben wie sie sind.

    Folgendes Beispiel zur Veranschaulichung:

    [Programmstart]

    Eintrag Nummer 1 | Originalwert
    Eintrag Nummer 2 | Originalwert
    Eintrag Nummer 3 | Originalwert

    [Button-Klick]

    Eintrag Nummer 1 | Originalwert
    Eintrag Nummer 2 | Geänderter Wert
    Eintrag Nummer 3 | Originalwert

    Wie kann ich das erreichen? Wie muss meine private void OnButtonClick(object sender, EventArgs e)-Funktion aussehen? Vor allem, wie kann ich auf einen speziellen Eintrag in dieser Liste zugreifen?

    Um mir besser helfen zu können, poste ich nachfolgend meinen Code. Es handelt sich um eine Xamarin.Android-App, ich arbeite mit einer ListView bzw. mit einem ListAdapter : ArrayAdapter:

    public class MyActivity : Activity
    {
       List List = null;
       protected override void OnCreate(Bundle bundle)
       {
           base.OnCreate(bundle);
           SetContentView(Resource.Layout.MyActivity);
           List = PopulateList();
           var lv = FindViewById(Resource.Id.list);
           var adapter = new ListAdapter(this, Resource.Layout.List, List);
           lv.Adapter = adapter;
           FindViewById(Resource.Id.button).Click += OnButtonClick;   
       }
    }
    
    class ListAdapter : ArrayAdapter
    {
        List List;
        public ListAdapter(Context Context, int ListId, List List) : base(Context, ListId, List)
        {
            this.List = List;
        }
        public override int Count
        {
            get { return List.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View v = convertView;
            if (v == null)
            {
                LayoutInflater inflater = (LayoutInflater)Context.GetSystemService(Context.LayoutInflaterService);
                v = inflater.Inflate(Resource.Layout.List, parent, false);
            }
            v.FindViewById(Resource.Id.name).Text = List[position].Name;
            v.FindViewById(Resource.Id.value).Text = "Originalwert";
            return v;
        }
    }
    

    Unter Nutzung folgender *.axml-Dateien:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
    xmlns:android        ="http://schemas.android.com/apk/res/android"
    android:orientation  ="vertical"
    android:layout_width ="match_parent"
    android:layout_height="match_parent">
    <Button
        android:layout_width ="match_parent"
        android:layout_height="wrap_content"
        android:text="Click Me"
        android:id="@+id/button" />
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list" />
    </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <TextView
            android:id="@+id/value"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </RelativeLayout>
    

    Wie kann ich in der private void OnButtonClick(object sender, EventArgs e)-Funktion auf die entsprechende View zugreifen/diese Verändern?

    Wenn ich folgendes mache:

    private void OnButtonClick(object sender, EventArgs e)
    {
       FindViewById(Resource.Id.value).Text = "Geänderter Wert";
    }
    

    ändert er den ersten Eintrag der Liste. Aber wie kann ich ausschließlich nur den zweiten ändern (siehe Beispiel)?

    Würde mich wirklich sehr freuen, wenn sich jemand meiner annehmen und mir helfen könnte.

    Vielen Dank für alle Antworten schon mal im Voraus

    Freundliche Grüße


Anmelden zum Antworten