Переключатели не отображаются, когда я использую setSingleChoiceItems AlertDialog.Builder с listadapter

Переключатели не отображаются, когда я использую setSingleChoiceItems из AlertDialog.Builder с listadapter. Радио кнопки отображаются, если я использую массив Charsequence[]. Пожалуйста, посмотрите на код, который я использую. Заранее спасибо!!

открытый класс ExampleApp extends Activity {

Context mContext;
ListAdapter myListAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mContext = this;
    myListAdapter = new myListAdapter(mContext);
    AlertDialog.Builder alt_bld = new AlertDialog.Builder(this);
    alt_bld.setTitle("Select any icon");
    alt_bld.setSingleChoiceItems(myListAdapter, -1, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            Toast.makeText(getApplicationContext(), "Selected icon = "+imageName[item], Toast.LENGTH_SHORT).show();
        }
    });
    AlertDialog alert = alt_bld.create();
    alert.show();
}

private class myListAdapter extends BaseAdapter{
    public myListAdapter(Context mContext){
}

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return imageName.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder myViewHolder;
        if(convertView == null){
            convertView = LayoutInflater.from(mContext).inflate(R.layout.listadapterview, null);
            myViewHolder = new ViewHolder();
            myViewHolder.txt_icon_name = (CheckedTextView) convertView.findViewById(R.id.CheckedTextView01);

            convertView.setTag(myViewHolder);
        }
        else{
            myViewHolder = (ViewHolder) convertView.getTag();
        }


        myViewHolder.txt_icon_name.setText(imageName[position]);
        return convertView;
    }

    class ViewHolder {
        CheckedTextView txt_icon_name;
    }
}

String[] imageName = {"icon1", "icon2", "icon3"};

} // XML для просмотра списков

2 ответа

У меня была похожая проблема. Хотя я использовал CheckedTextView кнопка радио не появлялась.

Решением было добавить следующее к CheckedTextView элемент в файле макета:

android:checkMark="?android:attr/listChoiceIndicatorSingle"

Вот мой файл "dialog_list_item.xml":

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_list_item_title"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16sp" 
    android:checkMark="?android:attr/listChoiceIndicatorSingle"
    >
</CheckedTextView>

Вот код для создания адаптера списка:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(
     this.getContext(), R.layout.dialog_list_item, 
     cursor, 
     new String[]{"title"}, 
     new int[]{R.id.dialog_list_item_title}
);

Я чертовски погуглил, чтобы найти ответ, но в конце концов нашел ответ прямо в SDK:

$android_sdk_home/platforms/android-x.x/data/res/layout/simple_list_item_single_choice.xml

Иногда исходный код лучше, чем любой поиск в Google.;)

Предположительно, R.layout.listadapterview это не CheckedTextViewчто и нужно для singleChoice работать.

Другие вопросы по тегам