Сделать элемент ListView выбранным и автоматически щелкнуть нажатием кнопки

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

С помощью приведенного ниже кода я могу выбрать первую строку, но не могу выбрать.

lv1.setItemChecked(0, true);

Это событие клика по моему списку:

final ListView lv1 = (ListView) findViewById(R.id.list);

// Pass results to ListViewAdapter Class
adapter = new ItemListBaseAdapter(this, somedata);
// Binds the Adapter to the ListView
lv1.setAdapter(adapter);
lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

lv1.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        //btnNxt.setEnabled(true);
        Intent i = new Intent(getApplicationContext(), FirstActivity.class);
        // Pass all data 
        i.putExtra("mydata", somedata);
        // Pass a single position
        i.putExtra("position", position);
        // Open SingleItemView.java Activity
        startActivity(i);
    }
});

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


person coder    schedule 27.12.2013    source источник
comment
Просто попробуйте установить setChoiceMode в listview перед инициализацией адаптера.   -  person Nas    schedule 27.12.2013


Ответы (3)


выбор элемента — это не то же самое, что щелчок по элементу. Если вы хотите отреагировать на выбор элемента, используйте setOnItemSelectedListener, но если вы хотите отреагировать на нажатие пользователем элемента, используйте setOnItemClickListener.

person jkhouw1    schedule 27.12.2013
comment
Я думаю, что это то, что я использовал. Но мой вопрос в том, как получить выбранный элемент при нажатии кнопки. - person coder; 27.12.2013
comment
Я думал, что вы хотели, когда кнопка нажата: выберите первый элемент и запустите событие. но что вы действительно хотите, так это знать, какое значение выбрано в данный момент? - person jkhouw1; 27.12.2013
comment
@Raghunandan-Нет, у меня нет кнопок. Вы хотите, чтобы я опубликовал свой XML? - person coder; 27.12.2013
comment
@ jkhouw1-На самом деле, когда я вручную щелкаю элемент списка, он работает нормально. Изначально мой выбор пуст. Поэтому я подумал о том, чтобы первая строка проверялась автоматически при загрузке активности. И когда я нажимаю кнопку, мне нужно захватить выбранную строку и переместить ее к следующему действию. - person coder; 27.12.2013
comment
в setOnItemClickListener установите тег (возможно, тег кнопки) на значение, которое было нажато. Затем, когда вы нажимаете кнопку, извлекайте значение тега. - person jkhouw1; 27.12.2013

Изменить на

 lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

Используйте SparseBooleanArray, чтобы получить проверенные элементы

Пример:

Чтобы проверить первую строку myList.setItemChecked(0, true).

 public class MainActivity extends Activity {

    ListView myList;
    Button getChoice;
    String[] listContent = {"January","February","March","April","May","June", "July","August","September","October","November","December" };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myList = (ListView)findViewById(R.id.listView1);
        getChoice = (Button)findViewById(R.id.button1);
        ArrayAdapter<String> adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,listContent);
        myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        myList.setAdapter(adapter);
        getChoice.setOnClickListener(new Button.OnClickListener(){
         @Override
         public void onClick(View v) {
                String selected = "";
                int cntChoice = myList.getCount();
                SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myList.getItemAtPosition(i).toString() + "\n";

                    }
                }

                Toast.makeText(MainActivity.this, selected,  Toast.LENGTH_LONG).show();

            }});
    }

}

Activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/button1"
         >

    </ListView>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="Button" />

</RelativeLayout>

Щелчок

введите здесь описание изображения

person Raghunandan    schedule 27.12.2013
comment
@Raghunandan-это не вопрос выбора одного или нескольких. Но мне нужно получить изначально установленную строку, т.е..lv1.setItemChecked(0, true); что проверяет первую строку, но ее позиция равна нулю. - person coder; 27.12.2013
comment
@coder проверьте редактирование и сап-шот. я проверил 3 строки, и 3 элемента строки отображаются в тосте - person Raghunandan; 27.12.2013

Попробуйте установить setChoiceMode в listview перед инициализацией адаптера.

lv1.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

adapter = new ItemListBaseAdapter(this, somedata);

lv1.setAdapter(adapter);
person Nas    schedule 27.12.2013