应用程序在 listview.getSelectedItem() 时崩溃(Dialog 中的 ListView)Android
App crashed on listview.getSelectedItem() (ListView inside Dialog) Android
我有一个对话框屏幕,在对话框中我有一个列表视图。我想通过吐司消息显示从列表视图中单击了哪个项目。因此,我尝试使用 listview.getSelectedItem().toString() 通过吐司消息显示被单击项目的消息,但在单击列表项时它崩溃了。但是,如果在列表视图中单击某个项目时,我只是按 toast 显示一个字符串,则不会发生崩溃。例如:
Toast.makeText(MainActivity.this, "Hello World", Toast.LENGTH_LONG).show();
但是在下面的代码中崩溃了:
private void showDialer()
{
//DIALOG SCREEN
final Dialog dialog = new Dialog(ActionModes.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialer_dialog);
final ListView book_list = (ListView)dialog.findViewById(R.id.listBooks);
ArrayAdapter<?> adapter_booklist = ArrayAdapter.createFromResource(
this, R.array.locations, android.R.layout.simple_spinner_item);
adapter_booklist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
book_list.setAdapter(adapter_booklist);
book_list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
Toast.makeText(MainActivity.this, book_list.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
}
});
dialog.show();
}
LOGCAT
06-02 23:53:34.521: I/class com.actionbarsherlock.sample.demos.ExternalDbOpenHelper(8581): Database already exists
06-02 23:53:35.321: W/KeyCharacterMap(8581): No keyboard for id -1
06-02 23:53:35.321: W/KeyCharacterMap(8581): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
06-02 23:53:41.291: W/dalvikvm(8581): threadid=1: thread exiting with uncaught exception (group=0x2aac8830)
06-02 23:53:41.291: E/AndroidRuntime(8581): FATAL EXCEPTION: main
06-02 23:53:41.291: E/AndroidRuntime(8581): java.lang.NullPointerException
06-02 23:53:41.291: E/AndroidRuntime(8581): at com.actionbarsherlock.sample.demos.ActionModes.onItemClick(ActionModes.java:87)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.ListView.performItemClick(ListView.java:3382)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1702)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Handler.handleCallback(Handler.java:587)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Handler.dispatchMessage(Handler.java:92)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Looper.loop(Looper.java:123)
06-02 23:53:41.291: E/AndroidRuntime(8581): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-02 23:53:41.291: E/AndroidRuntime(8581): at java.lang.reflect.Method.invokeNative(Native Method)
06-02 23:53:41.291: E/AndroidRuntime(8581): at java.lang.reflect.Method.invoke(Method.java:521)
06-02 23:53:41.291: E/AndroidRuntime(8581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
06-02 23:53:41.291: E/AndroidRuntime(8581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
06-02 23:53:41.291: E/AndroidRuntime(8581): at dalvik.system.NativeStart.main(Native Method)
通常,当您单击列表视图中的项目时,它不会立即将其状态更改为已选择。您应该通过以下方式获取该项目:
book_list.getItemAtPosition(position)
一方面,检查 book_list.getSelectedItem()
是否为 null
。
接下来你想做一个 book_list.getItemAtPosition(pos)
我有一个对话框屏幕,在对话框中我有一个列表视图。我想通过吐司消息显示从列表视图中单击了哪个项目。因此,我尝试使用 listview.getSelectedItem().toString() 通过吐司消息显示被单击项目的消息,但在单击列表项时它崩溃了。但是,如果在列表视图中单击某个项目时,我只是按 toast 显示一个字符串,则不会发生崩溃。例如:
Toast.makeText(MainActivity.this, "Hello World", Toast.LENGTH_LONG).show();
但是在下面的代码中崩溃了:
private void showDialer()
{
//DIALOG SCREEN
final Dialog dialog = new Dialog(ActionModes.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialer_dialog);
final ListView book_list = (ListView)dialog.findViewById(R.id.listBooks);
ArrayAdapter<?> adapter_booklist = ArrayAdapter.createFromResource(
this, R.array.locations, android.R.layout.simple_spinner_item);
adapter_booklist.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
book_list.setAdapter(adapter_booklist);
book_list.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
Toast.makeText(MainActivity.this, book_list.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
}
});
dialog.show();
}
LOGCAT
06-02 23:53:34.521: I/class com.actionbarsherlock.sample.demos.ExternalDbOpenHelper(8581): Database already exists 06-02 23:53:35.321: W/KeyCharacterMap(8581): No keyboard for id -1 06-02 23:53:35.321: W/KeyCharacterMap(8581): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 06-02 23:53:41.291: W/dalvikvm(8581): threadid=1: thread exiting with uncaught exception (group=0x2aac8830) 06-02 23:53:41.291: E/AndroidRuntime(8581): FATAL EXCEPTION: main 06-02 23:53:41.291: E/AndroidRuntime(8581): java.lang.NullPointerException 06-02 23:53:41.291: E/AndroidRuntime(8581): at com.actionbarsherlock.sample.demos.ActionModes.onItemClick(ActionModes.java:87) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.ListView.performItemClick(ListView.java:3382) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1702) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Handler.handleCallback(Handler.java:587) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Handler.dispatchMessage(Handler.java:92) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.os.Looper.loop(Looper.java:123) 06-02 23:53:41.291: E/AndroidRuntime(8581): at android.app.ActivityThread.main(ActivityThread.java:4627) 06-02 23:53:41.291: E/AndroidRuntime(8581): at java.lang.reflect.Method.invokeNative(Native Method) 06-02 23:53:41.291: E/AndroidRuntime(8581): at java.lang.reflect.Method.invoke(Method.java:521) 06-02 23:53:41.291: E/AndroidRuntime(8581): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 06-02 23:53:41.291: E/AndroidRuntime(8581): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634) 06-02 23:53:41.291: E/AndroidRuntime(8581): at dalvik.system.NativeStart.main(Native Method)
通常,当您单击列表视图中的项目时,它不会立即将其状态更改为已选择。您应该通过以下方式获取该项目:
book_list.getItemAtPosition(position)
一方面,检查 book_list.getSelectedItem()
是否为 null
。
接下来你想做一个 book_list.getItemAtPosition(pos)