Laden...

Anzeige von Daten in einer Liste zur Laufzeit ändern

Erstellt von TBMSam vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.402 Views
T
TBMSam Themenstarter:in
9 Beiträge seit 2018
vor 5 Jahren
Anzeige von Daten in einer Liste 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]

Name des Eintrags | Wert
---------------------+---------------
Eintrag Nummer 1 | Originalwert
Eintrag Nummer 2 | Originalwert
Eintrag Nummer 3 | Originalwert

[Button-Klick]

Name des Eintrags | Wert
---------------------+---------------
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 / ein paar Tipps geben könnte.

Vielen Dank für alle Antworten schon mal im Voraus

Freundliche Grüße

16.806 Beiträge seit 2008
vor 5 Jahren

Warum verwendest Du nicht den MVVM Pattern und DataBinding via Xamarin Forms?
Das macht die Sache einfacher und ist in Xamarin so vorgesehen.

Data Binding gibts ansonsten auch für die Android Projects (zB via MvvmCross)