Как получить getItemAtPosition в getView?

У меня есть ImageView с listItems из БД, и у каждого элемента списка есть два Buttons (добавить друга/отклонить друга). Я также использую CursorAdapter, и внутри моего адаптера у меня есть метод getView() для установки слушателей и перехвата кликов по текущему элементу Button.

и вот вопрос: мне нужно получить некоторые данные из БД для текущего элемента, когда я поймаю, нажмите на элемент Button (например, добавить друга). поэтому с помощью getView() параметров я могу получить позицию ListView элемента, но как из getView() правильно вызвать курсор и getItemAtPosition ?

вот мой метод getView() из класса адаптера:

@Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        View view =  super.getView(position, convertView, parent);
        Button mAcceptNewFriend = (Button) view.findViewById(R.id.btn_itemFriendsAddNew_accept);
            Button mRejectNewFriend = (Button)view.findViewById(R.id.btn_itemFriendsAddNew_reject);

            mRejectNewFriend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(mActivity, "user #" + position + " was removed", Toast.LENGTH_SHORT).show();

                }
            });
            mAcceptNewFriend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int friendId = mCursor.getInt(FriendsFragment.F_FRIEND_ID);
                }
            });
        return view;
    }

person Stan Malcolm    schedule 01.07.2015    source источник
comment
Является ли ваш родительский вид спискомView с элементами, имеющими две кнопки, или я неправильно понял ваш вопрос?   -  person Gabriella Angelova    schedule 06.07.2015


Ответы (2)


Второе возможное решение:

Попробуйте следующее решение: добавьте курсор с помощью конструктора вашего CoursorAdapter, а затем используйте cursor.moveToPosition(position) в методе getView(): Получить правильный курсор в CustomCursor Adapater getView()

person Gabriella Angelova    schedule 06.07.2015

Когда ваше родительское представление является listView, вы можете попробовать добавить в класс, где ваш ListView заполнен, метод для listItemClick и получить в нем курсор, например, так:

@Override
protected void onListItemClick(ListView l, View v, int position, long ida) {
   super.onListItemClick(l, v, position, ida);

   Cursor mycursor = (Cursor) getListView().getItemAtPosition(position); //I'm not sure for the getListView() part and I think that it could be (Cursor)l.getItemAtPosition(position); Please try with both suggestions if the first doesn't work for you
   Toast.makeText(mActivity, "mycursor.getString(1) " + mycursor.getString(1) +"   ", Toast.LENGTH_SHORT).show();
}
person Gabriella Angelova    schedule 06.07.2015
comment
хм, не могу разрешить onListItemClick в моем фрагменте... не могли бы вы дать более четкий ответ, как это сделать? - person Stan Malcolm; 06.07.2015
comment
попробуйте добавить в определение класса следующую реализацию: implements OnItemClickListener - person Gabriella Angelova; 06.07.2015
comment
я уже реализовал OnItemClickListener, но он предоставляет не onListItemClick, а onItemClick... и когда я нажимаю кнопку на listItem, прослушиватель onItemClick не работает.... - person Stan Malcolm; 06.07.2015
comment
Попробуйте установить OnListItemClickListener, например, так: listview.setOnItemClickListener(new onItemClickListener(){ @Override protected void onListItemClick(){ //here comes the code for the cursor from above } }); и в строке Cursor измените getListView() на listView (переменная с вашим listView) - person Gabriella Angelova; 06.07.2015
comment
когда я вызываю новый AdapterView.OnItemClickListener(), он вызывает onItemClick, но не onListItemClick, и если я пытаюсь перезаписать его - не удается разрешить метод - person Stan Malcolm; 06.07.2015
comment
хммм, тогда попробуйте метод onItemClick, например, такой: @Override public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { Cursor tmpCursor = arg0.getItemAtPosition(arg2); } - person Gabriella Angelova; 06.07.2015
comment
Давайте продолжим обсуждение в чате. - person Stan Malcolm; 06.07.2015