الروبوت: كيفية العثور على موقف النقر من قائمة السياق

StackOverflow https://stackoverflow.com/questions/2453620

  •  20-09-2019
  •  | 
  •  

سؤال

ولدي عرض القائمة مليئة البيانات. أقوم بإعداد قائمة السياق ليكون ListView باستخدام التعليمات البرمجية التالية:

list.setOnCreateContextMenuListener
(
  new View.OnCreateContextMenuListener() 
  {
        public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) 
        {
       AdapterContextMenuInfo mi =(AdapterContextMenuInfo) menuInfo;
       menu.add(0, 0, 0, "Delete item");                
    }
   }
);

ولدي طريقة تجاوز التالية للتحكم في دي contextmenu MENUITEM المختارة:

@Override
public boolean onContextItemSelected(MenuItem item) 
{
  switch(item.getItemId()) 
  { 
  case 0: 
    ShowAlert("hello from delete item");
    break; 
  default: 
  return super.onContextItemSelected(item); 
  } 
  return true; 
}

في هذه الطريقة overrided، كيف يمكن أن أجد هذا البند من وجهة النظر القائمة التي تم النقر؟

وشكرا مقدما. تحياتي الحارة. جوزيه

هل كانت مفيدة؟

المحلول

ويمكنك استخدام ContextMenu.ContextMenuInfo.

وشيء من هذا القبيل:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    int index = info.position;
}

ويمكنك أيضا الحصول على View بالضبط التي يتم عرض القائمة:

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    int index = info.position;
    View view = info.targetView;
}

نصائح أخرى

private static final int EDIT_ID = Menu.FIRST + 3;
private static final int DELETE_ID = Menu.FIRST + 4;
 @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        menu.add(Menu.NONE, EDIT_ID, Menu.NONE, "Edit").setAlphabeticShortcut(
                'e');
        menu.add(Menu.NONE, DELETE_ID, Menu.NONE, "Delete")
                .setAlphabeticShortcut('d');
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        switch (item.getItemId()) {
        case EDIT_ID:

            edit(info.id);
            return (true);
        case DELETE_ID:

            delete(info.id);
            return (true);
        }

        return (super.onOptionsItemSelected(item));
    }

وOK، من أجل حل مشكلة المعلومات باطل **** استخدام عضو ثابت وقيمة المجموعة من موقف حامل بك لحفظ القيمة في longclick عضوا طريقة على سبيل المثال: -

public class CurrentPosition {
   public static  int Pos{ get; set; }
}

public bool OnLongClick(View v)
{
    CurrentPosition.Pos = Position;
    return false;
}

وواستخدامها في السياق الخاص بك حدد البند:

public override bool OnContextItemSelected(IMenuItem item)
{
    switch (item.ItemId)
    {
        case 0:
            return true;
        case 1:
            Toast.MakeText(this,CurrentPosition.Pos.ToString(), ToastLength.Long).Show();
            return true;
        case 2:
            Toast.MakeText(this, "Save", ToastLength.Long).Show();
            return true;
        }
        return true;
    }
}

وC # رمز

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top