Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android自定义对话框强制关闭问题_Android_Dialog_Customdialog - Fatal编程技术网

Android自定义对话框强制关闭问题

Android自定义对话框强制关闭问题,android,dialog,customdialog,Android,Dialog,Customdialog,我正在尝试实现一个包含ListView的自定义对话框。目标是在单击按钮时显示对话框。为此,我正在为对话框创建一个自定义布局,并在单击按钮时设置内容视图。由于未知原因,该应用程序正在强制关闭。谁能告诉我我做错了什么?以下是代码片段: 主要活动: package com.example.zdialog; import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.v

我正在尝试实现一个包含ListView的自定义对话框。目标是在单击按钮时显示对话框。为此,我正在为对话框创建一个自定义布局,并在单击按钮时设置内容视图。由于未知原因,该应用程序正在强制关闭。谁能告诉我我做错了什么?以下是代码片段: 主要活动:

package com.example.zdialog;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final String[] myList={"book", "table", "car", "bag", "fridge",
                "television", "radio"};
        Button btn=(Button)findViewById(R.id.button1);
        ListView lv=(ListView)findViewById(R.id.listView1);
        ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList);
        lv.setAdapter(aa);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Dialog dialog=new Dialog(MainActivity.this);
                dialog.setContentView(R.layout.dialog_layout);
                dialog.show();

            }
        }); 
    }
}
package com.example.zdialog;
导入android.app.Activity;
导入android.app.Dialog;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.ListView;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最后一个字符串[]myList={“书”、“桌子”、“汽车”、“包”、“冰箱”,
“电视”、“广播”};
按钮btn=(按钮)findViewById(R.id.button1);
ListView lv=(ListView)findViewById(R.id.listView1);
ArrayAdapter aa=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,myList);
低压设置适配器(aa);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Dialog Dialog=新建对话框(MainActivity.this);
对话框.setContentView(R.layout.dialog\u布局);
dialog.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" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="17dp"
        android:text="Show Dialog" />

</RelativeLayout>

dialog_layout.xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>


如您所见,自定义对话框包含一个简单的ListView。我知道,还有其他方法可以实现基于列表的对话框,但我只想知道这段代码有什么问题(我自己学习Android编程)。请帮忙

ListView不在
R.layout.activity\u main
内,因此它提供
null

你需要换这条线

    ListView lv=(ListView)findViewById(R.id.listView1);
    ArrayAdapter<String> aa=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, myList);
    lv.setAdapter(aa);

ListView位于对话框布局内,但您正试图从“活动”布局获取它,因此请更改代码以便工作:

    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Dialog dialog=new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.dialog_layout);
             // initialize ListView here

            ListView lv=(ListView)dialog.findViewById(R.id.listView1);
            ArrayAdapter<String> aa=new ArrayAdapter<String>
             (MainActivity.this, android.R.layout.simple_list_item_1, myList);
            lv.setAdapter(aa);

            dialog.show();

        }
    }); 
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Dialog Dialog=新建对话框(MainActivity.this);
对话框.setContentView(R.layout.dialog\u布局);
//在这里初始化ListView
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
ArrayAdapter aa=新的ArrayAdapter
(MainActivity.this,android.R.layout.simple\u list\u item\u 1,myList);
低压设置适配器(aa);
dialog.show();
}
}); 

正如我从上面的代码中所看到的,您的
列表视图
位于您设置为自定义对话框背景的
对话框布局.xml中。但是您访问它时出错

将您的按钮更改为单击以下按钮:

btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Dialog dialog=new Dialog(MainActivity.this);
                dialog.setContentView(R.layout.dialog_layout);
                ListView lv=(ListView)dialog.findViewById(R.id.listView1);
                ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList);
                lv.setAdapter(aa);
                dialog.show();

            }
        }); 
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Dialog Dialog=新建对话框(MainActivity.this);
对话框.setContentView(R.layout.dialog\u布局);
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
ArrayAdapter aa=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,myList);
低压设置适配器(aa);
dialog.show();
}
}); 

并删除您之前所做的
列表视图初始化。

您不能先将数据设置到
列表视图中,然后再打开对话框。在显示
对话框之前,将数据设置到
列表视图中
,并仅针对
对话框的实例访问
列表视图

尝试如下:

btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Dialog dialog=new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.dialog_layout);
           ListView lv=(ListView)dialog.findViewById(R.id.listView1);
    ArrayAdapter<String> aa=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, myList);
            lv.setAdapter(aa);
            dialog.show();

        }
    }); 
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Dialog Dialog=新建对话框(MainActivity.this);
对话框.setContentView(R.layout.dialog\u布局);
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
ArrayAdapter aa=新的ArrayAdapter(MainActivity.this,android.R.layout.simple\u list\u item\u 1,myList);
低压设置适配器(aa);
dialog.show();
}
}); 

您需要更改,因为您的ListView

  ListView lv=(ListView)findViewById(R.id.listView1);
在您的对话框中。\u layout.xml:所以请更改它

  Dialog dialog=new Dialog(MainActivity.this);
  dialog.setContentView(R.layout.dialog_layout);
  ListView lv=(ListView)dialog.findViewById(R.id.listView1);
  ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList);
  lv.setAdapter(aa);
  dialog.show(); 
Dialog Dialog=新建对话框(MainActivity.this);
对话框.setContentView(R.layout.dialog\u布局);
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
ArrayAdapter aa=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,myList);
低压设置适配器(aa);
dialog.show();

将日志和行号一起发布
  Dialog dialog=new Dialog(MainActivity.this);
  dialog.setContentView(R.layout.dialog_layout);
  ListView lv=(ListView)dialog.findViewById(R.id.listView1);
  ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myList);
  lv.setAdapter(aa);
  dialog.show();