Obtener un solo elemento de ListFragment usando contextMenu
-
26-10-2019 - |
Pregunta
Estoy tratando de obtener un solo elemento de un fragmento de lista cuando se detecta mucho tiempo utilizando el menú contextual. La cosa es que el elemento que obtiene es el primer elemento de la lista y no el seleccionado, lo que significa ...
Si mi lista se veía así
item 5
item 4
item 3
item 2
item 1
y durante mucho tiempo presiono por decir item 2
me dará 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>
En una vista de lista, normalmente solo obtengo la vista text por identificación como esta
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;
}
});
Pero ese método no parece funcionar aquí
Solución
En su OnContextItemelected primero debe obtener el elemento seleccionado:
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
Luego puede decidir si consultar a través de ID o posición, puede obtener ambos de AdapterContextMenuInfo.
La forma en que lo está haciendo (con FindViewByid), supongo que simplemente obtendrá la primera vista que puede encontrar en la jerarquía de vista, es decir, la primera en la lista.