2016-12-09 3 views
0

Android - wie OnItemLongClick in Listenansicht in Xamarin verwenden?Android-wie OnItemLongClick in der Listenansicht in Xamarin verwenden

Ich entwickle eine App in Xamarin Android. In dieser App zeige ich eine benutzerdefinierte Liste an. Ich möchte ein Pop-up mit

anzeigen
listView_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e) 

In diesem Pop-up muss ich zwei Optionen anzeigen Update und löschen. Und abhängig von der Benutzerauswahl möchte ich weitere Verarbeitung vornehmen. Kann mir bitte jemand Beispiele geben, die ich benutzen kann?

+0

var Menü = new PopupMenu (this, (Ansicht) sender); menu.Infllate (Resource.Menu.popupmenu); menu.MenuItemClick + = (s, a) => { Schalter (a.Item.ItemId) { Fall Resource.Id.pm_update: // Update Sachen break; Fall Resource.Id.pm_delete: // löschen Zeug Pause; } }; menu.Show(); –

+0

Ich brauche etwas, um mir zu helfen, Swith update und lösche Aussage –

+0

Bitte nicht relevanten Code in die Kommentare. Bearbeiten Sie stattdessen Ihre Frage und fügen Sie den Code dort hinzu. – Meyer

Antwort

0

In diesem Popup muss ich zwei Optionen anzeigen Aktualisieren und löschen. Und abhängig von der Benutzerauswahl möchte ich weitere Verarbeitung vornehmen.

Sie müssen die ListView benachrichtigen, seine Ansicht zu ändern, wenn Element aktualisiert wird NotifyDataSetChanged() verwenden. Zum Beispiel:

Main.axml:

<ListView 
    android:id="@+id/lv" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" /> 

MainActivity:

public class MainActivity : Activity 
{ 
    public static List<string> items = new List<string>(); 
    public static MainAdapter adapter; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
     for (int i = 0; i < 10; i++) 
     { 
      items.Add("Item " + i); 
     } 
     adapter = new MainAdapter(this, items); 

     ListView lv = (ListView)FindViewById(Resource.Id.lv); 
     lv.Adapter = adapter; 

     lv.ItemLongClick += Lv_ItemLongClick; 
    } 

    private void Lv_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e) 
    { 
     var t = items[e.Position]; 
     Android.Widget.Toast.MakeText(this, t, Android.Widget.ToastLength.Short).Show(); 
     Console.WriteLine("Clicked on " + t); 
     //show dialog and set params 
     FragmentTransaction ft = FragmentManager.BeginTransaction(); 
     ListViewEditFragment dialog = new ListViewEditFragment(); 
     Bundle args = new Bundle(); 
     args.PutString("item", t); 
     dialog.Arguments = args; 
     dialog.Show(ft, "TAG"); 
    } 
} 

Dialog Layout:

<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:id="@+id/btn_item_delete" 
     android:text="delete this item" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 
    <Button 
     android:id="@+id/btn_item_edit" 
     android:text="edit this item" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 
    <EditText 
     android:id="@+id/item_editor" 
     android:layout_height="50dp" 
     android:layout_width="300dp" 
     android:enabled="false" /> 
    <Button 
     android:id="@+id/btn_commit" 
     android:text="Commit" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 
</LinearLayout> 

Und mein ListViewEditFragment für Dialog:

public class ListViewEditFragment : DialogFragment 
{ 
    private EditText ediotr; 

    private string item; 

    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
     var args = Arguments; 
     item = args.GetString("item"); 
    } 

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     var view = inflater.Inflate(Resource.Layout.ListViewEditPopup, container, false); 

     Button btnDelete = (Button)view.FindViewById(Resource.Id.btn_item_delete); 
     btnDelete.Click += BtnDelete_Click; 

     Button btnEdit = (Button)view.FindViewById(Resource.Id.btn_item_edit); 
     btnEdit.Click += BtnEdit_Click; 

     ediotr = (EditText)view.FindViewById(Resource.Id.item_editor); 
     ediotr.Text = item; 

     Button btnCommit = (Button)view.FindViewById(Resource.Id.btn_commit); 
     btnCommit.Click += BtnCommit_Click; 
     return view; 
    } 

    private void BtnDelete_Click(object sender, EventArgs e) 
    { 
     MainActivity.items.Remove(item); 
     MainActivity.adapter.NotifyDataSetChanged(); 
     this.Dismiss(); 
    } 

    private void BtnEdit_Click(object sender, EventArgs e) 
    { 
     ediotr.Enabled = true; 
    } 

    private void BtnCommit_Click(object sender, EventArgs e) 
    { 
     var index = MainActivity.items.FindIndex(s => s == item); 
     MainActivity.items[index] = ediotr.Text; 
     MainActivity.adapter.NotifyDataSetChanged(); 
     this.Dismiss(); 
    } 
} 

Rendering-Bild dieser Demo:

enter image description here

Verwandte Themen