2010-08-29 44 views
5

Tôi muốn hiển thị nhiều dòng với các kiểu văn bản khác nhau cho từng mục trong danh sách bằng cách sử dụng AlertDialog, nhưng không thể sử dụng bất kỳ ví dụ nào.Cách tùy chỉnh các mục danh sách trong Android AlertDialog

Có ai biết cách tùy chỉnh các mục của AlertDialog không? Hay tôi thực sự phải tạo một Hoạt động với một ListView cho điều này?

Trả lời

10

Sử dụng setAdapter() trên AlertDialog.Builder để cung cấp tùy chỉnh riêng ListAdapter cho danh sách của bạn.

5

Xem THIS LINK để thực hiện ý tưởng trên.

chỉnh sửa: bằng cách này, tôi đã thực hiện một số thay đổi để thực sự hiển thị các biểu tượng khác nhau:

list_item.xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 
     android:id="@+id/icon" 
     android:contentDescription="@string/icon_descr" 
     android:layout_width="48dp" 
     android:layout_height="48dp" 
     android:layout_gravity="left" /> 

    <TextView 
     android:id="@+id/title" 
     android:text="" 
     android:paddingLeft="10dip" 
     android:layout_gravity="center" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

Và vào hoạt động của bạn:

// dialog list entries 
final String[] items = { 
    getString(R.string.entry_0), 
    getString(R.string.entry_1), 
    getString(R.string.entry_2) 
}; 

// dialog list icons: some examples here 
final int[] icons = { 
    android.R.drawable.ic_menu_edit, 
    android.R.drawable.ic_menu_send, 
    android.R.drawable.ic_menu_delete 
}; 

ListAdapter adapter = new ArrayAdapter<String>(
    getApplicationContext(), R.layout.list_item, items) { 

    ViewHolder holder; 

    class ViewHolder { 
     ImageView icon; 
     TextView title; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
    final LayoutInflater inflater = (LayoutInflater) getApplicationContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     convertView = inflater.inflate(
     R.layout.list_item, null); 

     holder = new ViewHolder(); 
     holder.icon = (ImageView) convertView 
     .findViewById(R.id.icon); 
     holder.title = (TextView) convertView 
     .findViewById(R.id.title); 
     convertView.setTag(holder); 
    } else { 
     // view already defined, retrieve view holder 
     holder = (ViewHolder) convertView.getTag(); 
    }  

    holder.title.setText(items[position]); 

    holder.icon.setImageResource(icons[position]); 
    return convertView; 
    } 
}; 

// ---------- 

AlertDialog.Builder builder = new AlertDialog.Builder(myActivity.this); 

builder.setTitle("title"); 

builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     // --- 
    } 

}); 

builder.create(); 
if (! ((Activity) myActivity.this).isFinishing()) { 
    builder.show(); 
} 
+0

này mang lại cho tôi lỗi 'IllegalStateException: Dịch vụ hệ thống không khả dụng cho Hoạt động trước khi onCreate' – mrid

Các vấn đề liên quan