Просмотр списка onItemClick не работает

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

public class SavedAddress2 extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private Toolbar toolbar;
    private ListView listView1;
    List<list_addr> rowitems;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.saved_address2);

        toolbar = (Toolbar) findViewById(R.id.tool_bar3);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowHomeEnabled(true);

        rowitems = new ArrayList<list_addr>();

        listView1 = (ListView) findViewById(R.id.addr_list);
        list_addr_adapter adapter = new list_addr_adapter(this,
                R.layout.items_sav_addr2, SavedAddress.rowitems);
        listView1.setAdapter(adapter);
        listView1.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(Main.this,Second.class);
        startActivity(intent);
    }

    //...
}

Это потому, что у меня в списке стоит флажок? Потому что я применил тот же метод для других представлений списка, и они отлично работают.


person TeeKay    schedule 03.01.2016    source источник
comment
поместите этот атрибут android: clickable = true в тег listView в XML   -  person WiFi    schedule 03.01.2016
comment
@TomHehir Все, что вы только что сказали, уже сделано.   -  person TeeKay    schedule 03.01.2016


Ответы (3)


Попробуйте установить флажок не в фокусе, например:

android:focusable="false"
android:focusableInTouchMode="false"

Надеюсь, поможет.

person Let'sRefactor    schedule 03.01.2016
comment
Это сработало. Но в этом случае, если мы поставим галочку, ничего не произойдет. Не могли бы вы мне сказать, как это сделать? - person TeeKay; 03.01.2016
comment
это поможет вам, если вы хотите, чтобы элементы управления элементами списка имели события. - person Let'sRefactor; 03.01.2016
comment
Большое спасибо! Сработало у меня :) - person TeeKay; 03.01.2016

в вашем макете xml добавьте это свойство в корневой макет

android:descendantFocusability="blocksDescendants"

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

android:focusable="false"
android:focusableInTouchMode="false"
person Ben_Gratvol    schedule 03.01.2016
comment
Это сработало. Но в этом случае, если мы поставим галочку, ничего не произойдет. Не могли бы вы мне сказать, как это сделать? - person TeeKay; 03.01.2016
comment
установите прослушиватель onClick в своем классе адаптера - person Ben_Gratvol; 03.01.2016
comment
прослушиватель onClick для CheckBox - person Ben_Gratvol; 03.01.2016

вы передаете неправильный контекст класса.

Намерение намерения = новое намерение (Main.this, Second.class);

startActivity (намерение);

и ваш класс SavedAddress2

измените это на

Намерение намерения = новое намерение (SavedAddress2.this, Second.class);

startActivity (намерение);

public class SavedAddress2 extends AppCompatActivity implements AdapterView.OnItemClickListener {
    private Toolbar toolbar;
    private ListView listView1;
    List<list_addr> rowitems;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.saved_address2);

        toolbar = (Toolbar) findViewById(R.id.tool_bar3);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowHomeEnabled(true);

        rowitems = new ArrayList<list_addr>();

        listView1 = (ListView) findViewById(R.id.addr_list);
        list_addr_adapter adapter = new list_addr_adapter(this,
                R.layout.items_sav_addr2, SavedAddress.rowitems);
        listView1.setAdapter(adapter);
        listView1.setOnItemClickListener(this);
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Intent intent = new Intent(Main.this,Second.class);
        startActivity(intent);
    }

    //...
}

Дайте мне знать, если это сработает для вас! :)

person Vivek Kumar    schedule 20.02.2016