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:
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(); –
Ich brauche etwas, um mir zu helfen, Swith update und lösche Aussage –
Bitte nicht relevanten Code in die Kommentare. Bearbeiten Sie stattdessen Ihre Frage und fügen Sie den Code dort hinzu. – Meyer