Obtenir un seul élément de listfragment en utilisant ContextMenu
-
26-10-2019 - |
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
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.