Получение одного элемента из фрагмента списка с помощью ContextMenu - PullRequest
2 голосов
/ 01 декабря 2011

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

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

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>

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

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

но этот метод здесь не работает

1 Ответ

2 голосов
/ 01 декабря 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...