自定义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(项目);
}
}