我正在尝试将所有选定的列表项存储在字符串中,并在单击提交按钮时显示该字符串。 我为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)
答案 0 :(得分:0)
类型转换的问题。您试图将ListAdapter强制转换为ListView。
更改
((ListView) lAdapter).getCheckedItemPositions();
到
getListView().getCheckedItemPositions().
同时更改此
((AdapterView<ListAdapter>) lAdapter).getItemAtPosition(i).toString()
到
getListView().getItemAtPosition(i).toString();