Question

Je suis en train d'obtenir un seul article d'une listfragment lorsque longtemps pressé est détecté en utilisant le menu contextuel. la chose est l'élément qu'il obtient est le premier élément de la liste et non celle sélectionnée, ce qui signifie ...

si ma liste ressemblait à ceci

item 5 item 4 item 3 item 2 item 1

et je appuyez longuement sur item 2 de dire

il me donnera 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>

dans une vue de la liste Normalement, je reçois le textview par id comme ceci

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;
        }
    });

mais cette méthode ne semble pas fonctionner ici

Était-ce utile?

La solution

Dans votre onContextItemSelected vous devez d'abord chercher l'élément sélectionné:

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

Ensuite, vous pouvez décider de la requête par ID ou la position, vous pouvez obtenir à la fois AdapterContextMenuInfo .

La façon dont vous le faites (avec findViewById) Je suppose que ce sera juste aller chercher la première vue qu'il peut trouver dans la hiérarchie de vue, à savoir la première dans la liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top