setOnItemClickListener для ландшафтного режима

#android #listview #landscape

#Android #просмотр списка #пейзаж

Вопрос:

Мое приложение для Android работает в ландшафтном режиме. У меня есть listview, который содержит некоторые элементы. Проблема в том, что setOnItemClickListener вызывается только тогда, когда я нажимаю на название элемента. Я имею в виду, что если я выберу строку, в которой нет имени элемента, элемент не будет выбран, и setOnItemClickListener не вызывается. Что мне делать?

Пожалуйста, помогите мне. Заранее спасибо..

Вот мой код :

 MyListView = (ListView) findViewById(R.id.MyListView);
        MyListView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, playlists));
        MyListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View v, int position,
                    long id) {
                System.out.println("list touch "  playlists[position] " si id " idPlaylist[position]);
                dialogwait = ProgressDialog.show(Playlist.this, "Loading...","Please wait..", true);

                Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
                i.putExtra("id",idPlaylist[position]);
                i.putExtra("timer",timerPlaylist[position]);
                startActivity(i);
                finish();
            }
        });
  

Комментарии:

1. Есть ли у вас onclicklistener в виджете вашего имени? попробуйте избавиться от него.

2. У меня нет onclicklistener. У меня есть только onitemclicklistener. Я отредактировал свой вопрос с помощью своего кода.

3. я подозреваю, что android.R.layout.simple_list_item_1 имеет текстовое представление с шириной и высотой, установленными в wrap_content

4. simple_list_item_1 — это файл по умолчанию для listview. Я его не создавал

5. Да, проблема была в listview в xml: <ListView android: id=»@ id /MyListView» android:layout_width=»fill_parent» android:layout_height=»wrap_content» />

Ответ №1:

если вы расширяете какой-либо вид для элементов в списке, устанавливая ширину и высоту в XML-макете, чтобы fill_parent решить вашу проблему,

ну, не используйте android.R.layout.simple_list_item_1 , потому что вы не можете его изменить…

вы можете сделать

 MyListView = (ListView) findViewById(R.id.MyListView);
        MyListView.setAdapter(new ArrayAdapter<String>(this,
                R.layout.mylistitem, playlists));
        MyListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> arg0, View v, int position,
                    long id) {
                System.out.println("list touch "  playlists[position] " si id " idPlaylist[position]);
                dialogwait = ProgressDialog.show(Playlist.this, "Loading...","Please wait..", true);

                Intent i = new Intent(getBaseContext(), ViewPlaylist.class);
                i.putExtra("id",idPlaylist[position]);
                i.putExtra("timer",timerPlaylist[position]);
                startActivity(i);
                finish();
            }
        });
  

тогда R.layout.mylistitem может быть

 <TextView android:id="@ id/sometitle"
        android:layout_width="fill_parent"
        android:layout_height="some_height_you_want" />
  

Комментарии:

1. android.R.layout.simple_list_item_1 — это макет Android, как он может его изменить?

Ответ №2:

чтобы использовать ваш textview вместо R.layout.simple_list_item_1, создайте свой textview и поместите его в

MyListView.setAdapter(новый ArrayAdapter(этот, R.layout.mytextview, плейлисты));

Ответ №3:

Проблема заключалась в том, что у меня было android:layout_width="wrap_content" в ListView. Это исходный код для ListView :

  <ListView android:id="@ id/MyListView"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" />