سؤال

I am trying to get a single item from a listfragment when long pressed is detected using context menu. the thing is the item it gets is the first item in the list and not the one selected, meaning...

if my list looked like this

item 5 item 4 item 3 item 2 item 1

and I long press on say item 2

it will give me 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>

in a list view I normally just get the textview by id like this

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

but that method does not seem to work here

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

المحلول

In your onContextItemSelected you first need to fetch the selected item:

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

Then you can decide whether to query through id or position, you can get both from AdapterContextMenuInfo.

The way you're doing it (with findViewById) I suppose it will just fetch the first view that it can find in the view hierarchy, i.e. the first in the list.

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