2011-12-01 2 views
2

Я пытаюсь получить один элемент из списка, когда длительное нажатие будет обнаружено с помощью контекстного меню. вещь деталь он получает первый элемент в списке, а не один выбран, то есть ...Получение одного элемента из списка с использованием ContextMenu

если мой список выглядел как этот

item 5 item 4 item 3 item 2 item 1

и я долгое время нажимаю на item 2

это даст мне item 5

@Override 
    public void onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo menuInfo){ 
     super.onCreateContextMenu(menu, v, menuInfo); 
     menu.add(Menu.NONE,Menu.NONE,Menu.NONE,"Delete"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 

     Vibrator vibrator = (Vibrator)getActivity().getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(new long [] {0,20,0,0}, -1); 
     TextView tv = (TextView)getActivity().findViewById(R.id.bListTextView); 
     name = tv.getText().toString(); 
     Log.d("List", name); 
     Cursor cID = getActivity().getContentResolver().query(BowlersDB.CONTENT_URI,new String[] {BowlersDB.ID,BowlersDB.NAME},BowlersDB.NAME + "=" + name,null,null); 
     String nameID = cID.getString(1); 
     getActivity().getContentResolver().delete(BowlersDB.CONTENT_URI,"_id" + "=" + nameID,null); 
     return super.onContextItemSelected(item); 
    } 

XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<TextView 
    android:id="@+id/bListTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="60dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:text="Large Text" 
    android:paddingLeft="10dp" 
    android:paddingTop="10dp" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textSize="30dp" /> 

</RelativeLayout> 

в списке я обычно просто получить TextView по идентификатору, как этот

mContactList = (ListView) findViewById(R.id.contactList); 
mContactList.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> arg0,View arg1,int arg2,long arg3) { 

      Vibrator v = (Vibrator)getSystemService(VIBRATOR_SERVICE); 
      v.vibrate(new long [] {0,20,0,0}, -1); 
      SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(Contacts.this); 
      SharedPreferences.Editor edit = pref.edit(); 
      TextView tv =(TextView)arg1.findViewById(R.id.contactEntryText); 
      n = tv.getText().toString(); 
      edit.putString(SmsPrefs.NAME, n).commit(); 
      showDialog(1); 
      return false; 
     } 
    }); 

, но этот метод не похоже на работу здесь

+0

Я делаю что-то подобное ЗДЕСЬ !!! http: //stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42

ответ

2

В ваш onContextItemSelected вам нужно сначала выбрать выбранный элемент:

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

Затем вы можете решить, следует ли запрашивать идентификатор или позицию, вы можете получить как от AdapterContextMenuInfo.

Как вы это делаете (с помощью findViewById) Я предполагаю, что он просто получит первое представление, которое оно может найти в иерархии представлений, то есть в первом списке.

+0

Я бы никогда не знал, что это так, намного проще и лучше, чем я делал, потому что он дает идентификатор элемента в базе данных. – tyczj

Смежные вопросы