【问题标题】:App crashed on listview.getSelectedItem() (ListView inside Dialog) Android应用程序在 listview.getSelectedItem() (ListView inside Dialog) Android 上崩溃
【发布时间】:2015-06-02 18:19:32
【问题描述】:

我有一个对话框屏幕,在对话框内我有一个列表视图。我想通过 toast 消息显示从列表视图中单击了哪个项目。因此,我尝试使用 listview.getSelectedItem().toString() 通过 toast 消息显示单击项的消息,但是单击列表项时它崩溃了。但是,如果我在列表视图中单击项目时仅按 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): 数据库已经存在 06-02 23:53:35.321: W/KeyCharacterMap(8581): id -1 没有键盘 06-02 23:53:35.321:W/KeyCharacterMap(8581):使用默认键盘映射:/system/usr/keychars/qwerty.kcm.bin 06-02 23:53:41.291: W/dalvikvm(8581): threadid=1: 线程以未捕获的异常退出 (group=0x2aac8830) 06-02 23:53:41.291:E/AndroidRuntime(8581):致命异常:主要 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$2.onItemClick(ActionModes.java:87) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.widget.AdapterView.performItemClick(AdapterView.java:284) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.widget.ListView.performItemClick(ListView.java:3382) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.widget.AbsListView$PerformClick.run(AbsListView.java:1702) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.os.Handler.handleCallback(Handler.java:587) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.os.Handler.dispatchMessage(Handler.java:92) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.os.Looper.loop(Looper.java:123) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 android.app.ActivityThread.main(ActivityThread.java:4627) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 java.lang.reflect.Method.invokeNative(Native Method) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 java.lang.reflect.Method.invoke(Method.java:521) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876) 06-02 23:53:41.291: E/AndroidRuntime(8581): 在 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)

【问题讨论】:

  • 向我们展示 LogCat..请!!
  • @Roon13 我已经发布了 LogCat
  • 什么是ActionModes.java:87
  • 那是Toast.makeText(ActionModes.this, book_list.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
  • book_list.getSelectedItem() 返回空值。你调试过你的文件吗?

标签: android listview dialog


【解决方案1】:

通常,当您单击列表视图中的项目时,它不会立即将其状态更改为已选择。您应该通过以下方式获得该项目:

book_list.getItemAtPosition(position)

【讨论】:

    【解决方案2】:

    一方面,检查book_list.getSelectedItem() 是否为null

    接下来你想做一个book_list.getItemAtPosition(pos)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多