Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/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_Listview_Dialog_Android Edittext_Android Dialog - Fatal编程技术网

自定义android对话框看起来很奇怪

自定义android对话框看起来很奇怪,android,listview,dialog,android-edittext,android-dialog,Android,Listview,Dialog,Android Edittext,Android Dialog,我试图创建一个对话框,它有listView和两个editText 对话框代码 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_add_task: AlertDialog.Builder alertDialog = new AlertDialog.B

我试图创建一个对话框,它有
listView
和两个
editText

对话框代码

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_add_task:
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
                LayoutInflater inflater = getLayoutInflater();
                View convertView = (View) inflater.inflate(R.layout.custom_dialog, null);
                alertDialog.setView(convertView);
                ListView lv = (ListView) convertView.findViewById(R.id.listView1);
                EditText username = (EditText)convertView.findViewById(R.id.username);
                EditText pass = (EditText) convertView.findViewById(R.id.password);
                ArrayList<ToDoList> search = new ArrayList<ToDoList>();
                DialogAdapter adapter=new DialogAdapter(getApplication(),search,lv,username,pass);
                lv.setAdapter(adapter);
                alertDialog.show();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
自定义对话框

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

</ListView>

带有编辑文本的对话框

public class ToDoList {

    private String task = "";
    private String date = "";

    public ToDoList(String task)
    {
        this.task= task;
    }

    public void setTask(String task) {
        this.task = task;
    }

    public String getTask() {
        return task;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDate() {
        return task;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/username"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp"
        android:hint="Add new task" />

    <EditText
        android:id="@+id/password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="16dp"
        android:fontFamily="sans-serif"
        android:hint="Summary"/>
</LinearLayout>

快照

public class ToDoList {

    private String task = "";
    private String date = "";

    public ToDoList(String task)
    {
        this.task= task;
    }

    public void setTask(String task) {
        this.task = task;
    }

    public String getTask() {
        return task;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getDate() {
        return task;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <EditText
        android:id="@+id/username"
        android:inputType="textEmailAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="4dp"
        android:hint="Add new task" />

    <EditText
        android:id="@+id/password"
        android:inputType="textPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="16dp"
        android:fontFamily="sans-serif"
        android:hint="Summary"/>
</LinearLayout>


对话看起来很奇怪。这里怎么了?谢谢。

首先,没有显示任何内容的主要原因是您的
ArrayList
没有项目

在适配器的构造函数中,您不需要传递
editText
,适配器中的
convertView
将确保为您提供引用

下面是修改后的适配器类:

public class DialogAdapter extends BaseAdapter {

    private static ArrayList<ToDoList> search;
    ListView listview;
    Context mContext;


    public DialogAdapter(Context context, ArrayList<ToDoList> searchList, ListView listview) {
        search=searchList;
        this.listview=listview;
        this.mContext = context;

    }
    @Override
    public int getCount() {
        return search.size();
    }

    @Override
    public ToDoList getItem(int position) {
        return search.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder= new ViewHolder();
        if (convertView == null) {

            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(R.layout.dialog_with_edittext, parent,false);

            holder.name = (EditText) convertView.findViewById(R.id.username);
            holder.pass = (EditText) convertView.findViewById(R.id.password);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.name.setText(search.get(position).getDate());
        holder.pass.setText(search.get(position).getTask());
        return convertView;
    }

    static class ViewHolder {
        EditText pass;
        EditText name;

    }
}
公共类DialogAdapter扩展了BaseAdapter{ 私有静态数组列表搜索; 列表视图列表视图; 语境; 公共对话框适配器(上下文上下文、ArrayList搜索列表、ListView ListView){ 搜索=搜索列表; this.listview=listview; this.mContext=上下文; } @凌驾 public int getCount(){ 返回search.size(); } @凌驾 public-ToDoList-getItem(int位置){ 返回search.get(位置); } @凌驾 公共长getItemId(int位置){ 返回0; } @凌驾 公共视图getView(int位置、视图转换视图、视图组父视图){ ViewHolder=新的ViewHolder(); if(convertView==null){ LayoutFlater充气机=LayoutFlater.from(mContext); convertView=充气机。充气(R.layout.dialog_,带编辑文本,父项,false); holder.name=(EditText)convertView.findViewById(R.id.username); holder.pass=(EditText)convertView.findViewById(R.id.password); convertView.setTag(支架); } 否则{ holder=(ViewHolder)convertView.getTag(); } holder.name.setText(search.get(position.getDate()); holder.pass.setText(search.get(position.getTask()); 返回视图; } 静态类视窗夹{ 编辑文本通行证; 编辑文本名称; } } 对于您的对话框,请尝试使用该类,以便更轻松地进行自定义:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_add_task:

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    dialog = new Dialog(this, android.R.style.Theme_Material_Dialog);

                } else {
                    dialog = new Dialog(this);
                }
                dialog.setContentView(R.layout.custom_dialog);

                ListView lv = (ListView) dialog.findViewById(R.id.listView1);


                ArrayList<ToDoList> search = new ArrayList<>();
                search.add(0,new ToDoList("example")); //populate your list here

                DialogAdapter adapter=new DialogAdapter(this,search,lv);
                lv.setAdapter(adapter);

                WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
                params.width = 800;
                params.height = 800; //create the window size however you like
                dialog.getWindow().setAttributes(params);
                dialog.setTitle("My dialog");
                dialog.show();
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }
@覆盖
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例R.id.action\u add\u任务:
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
dialog=新建对话框(这是android.R.style.Theme\u Material\u对话框);
}否则{
dialog=新建对话框(此对话框);
}
setContentView(R.layout.custom_对话框);
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
ArrayList search=新建ArrayList();
search.add(0,newtodolist(“示例”);//在此处填充您的列表
DialogAdapter=新的DialogAdapter(此、搜索、lv);
低压设置适配器(适配器);
WindowManager.LayoutParams params=dialog.getWindow().getAttributes();
参数宽度=800;
params.height=800;//创建任意大小的窗口
dialog.getWindow().setAttributes(参数);
对话框.setTitle(“我的对话框”);
dialog.show();
返回true;
违约:
返回super.onOptionsItemSelected(项目);
}
}