Как сделать imageView кликабельным из OnItemClickListener?

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(final AdapterView<?> parent, View view, final int position, long id) 
        {

         // My code is here. I want make my image clickable. I don't want make it clickable in my CustomAdapter getView() method because it doesn't allows me open DialogFragment from there.
         // I already setted in xml of image clickable="true" and focusable = "false"
         //I'll admit for any help and thanks in advance

        }
}

3 ответа

Если вы берете изображение Onclick из адаптера, вы не можете использовать setOnItemClickListener из события просмотра списка. Я предложил вам взять Onclick и вместо setOnItemClickListener взять Onclick из адаптера.

Сначала вы должны добавить OnClickListener для ImageView в классе адаптера, как

viewHolder.button1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    ((ListView) parent).performItemClick(v, position, 0); // Let the event be handled in onItemClick()
}

});

Затем после того, как вы можете получить доступ к ImageView в onItemClick лайк

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    long viewId = view.getId();


if (viewId == R.id.button1) {
        Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT).show();
    } else if (viewId == R.id.button2) {
        Toast.makeText(this, "Button 2 clicked", Toast.LENGTH_SHORT).show();
    } else {
        Toast.makeText(this, "ListView clicked" + id, Toast.LENGTH_SHORT).show();
    }
}

Наслаждаться!...

Не должно быть проблемой, чтобы показать диалоговое окно от адаптера. Если вашему адаптеру нужно что-то, чего у него нет, то вы можете добавить поле для своего адаптера с помощью некоторого слушателя, например private final OnImageClickListener и создайте интерфейс:

public interface OnImageClickListener {
    void onImageClicked(View view, int position, int id);
}

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

Другие вопросы по тегам