Android:如何通过点击按钮获取多个选定项目?

时间:2014-03-22 18:13:01

标签: android list

我正在尝试将所有选定的列表项存储在字符串中,并在单击提交按钮时显示该字符串。 我为onClick事件编写了以下代码,但程序强制在单击按钮时关闭。

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.attendancelist);
    submitButton = (Button) findViewById(R.id.submit);
    submitButton.setOnClickListener(this);
    try {


        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, new ArrayList()));
        ListView listView = getListView();
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

        new AddStringTask().execute();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(), "Null", Toast.LENGTH_LONG)
                .show();
    }



public void onClick(View arg0) {
    // TODO Auto-generated method stub
    String checked = "";
    ListAdapter lAdapter = getListAdapter();
    StringBuilder choicesString = new StringBuilder();
    a = new SparseBooleanArray();
    a.clear();
    a = ((ListView) lAdapter).getCheckedItemPositions();
    int cntChoice = ((Adapter) a).getCount();

    for(int i = 0; i < cntChoice; i++)
    {
    if(a.get(i) == true) 
     {
         checked += ((AdapterView<ListAdapter>) lAdapter).getItemAtPosition(i).toString() + "\n";
     }

    }
    Log.i("SHUBH", "U selected "+ checked);


}

Logcat 会显示以下错误:

    03-22 23:09:04.002: E/AndroidRuntime(313): FATAL EXCEPTION: main
03-22 23:09:04.002: E/AndroidRuntime(313): java.lang.ClassCastException: android.widget.ArrayAdapter
03-22 23:09:04.002: E/AndroidRuntime(313):  at com.example.universityattendance.AttendanceActivity.onClick(AttendanceActivity.java:136)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.view.View.performClick(View.java:2408)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.view.View$PerformClick.run(View.java:8816)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.os.Handler.handleCallback(Handler.java:587)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.os.Handler.dispatchMessage(Handler.java:92)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.os.Looper.loop(Looper.java:123)
03-22 23:09:04.002: E/AndroidRuntime(313):  at android.app.ActivityThread.main(ActivityThread.java:4627)
03-22 23:09:04.002: E/AndroidRuntime(313):  at java.lang.reflect.Method.invokeNative(Native Method)
03-22 23:09:04.002: E/AndroidRuntime(313):  at java.lang.reflect.Method.invoke(Method.java:521)
03-22 23:09:04.002: E/AndroidRuntime(313):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-22 23:09:04.002: E/AndroidRuntime(313):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-22 23:09:04.002: E/AndroidRuntime(313):  at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

类型转换的问题。您试图将ListAdapter强制转换为ListView。

更改

((ListView) lAdapter).getCheckedItemPositions();

getListView().getCheckedItemPositions().

同时更改此

((AdapterView<ListAdapter>) lAdapter).getItemAtPosition(i).toString()

getListView().getItemAtPosition(i).toString();
相关问题