2016-09-20 122 views
1

我試圖做一個對話框,其中有listView和兩個editText自定義android對話框看起來很奇怪

對話框代碼

@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); 
     } 
    } 

DialogAdapter

public class DialogAdapter extends BaseAdapter { 

    Context context; 
    private static ArrayList<ToDoList> search; 
    private LayoutInflater mInflater; 
    ListView listview; 
    EditText User,Pass; 

    public DialogAdapter(Context context, ArrayList<ToDoList> searchList,ListView listview,EditText user,EditText pass) { 
     search=searchList; 
     this.listview=listview; 
     this.User= user; 
     this.Pass=pass; 
     mInflater = LayoutInflater.from(context); 
    } 
    public int getCount() { 
     return search.size(); 
    } 

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

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


    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.dialog_with_edittext, null); 
      holder= new ViewHolder(); 
      holder.name = (EditText) convertView.findViewById(R.id.username); 
      holder.pass = (EditText) convertView.findViewById(R.id.password); 
      convertView.setTag(holder); 
     } 
     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; 

    } 
} 

TodoList的

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; 
    } 
} 

CUSTOM_DIALOG

<?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> 

dialog_with_edittext

<?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> 

快照

enter image description here

對話顯得怪異。這裏有什麼問題?謝謝。

回答

1

首先,沒有任何顯示的主要原因是因爲您的ArrayList<ToDoList>沒有項目。

在您的適配器的構造函數中,您不需要通過editTexts,否則適配器中的convertView將確保爲您提供參考。

因此,這裏是你的適配器類revisioned:

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; 

    } 
} 

併爲你的對話框,請嘗試使用類Dialog,所以你可以自定義簡單:

@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); 
     } 
    } 
+0

感謝兄弟.... –