Подтвердить что ты не робот

AlertDialog с флажком В android

Я новичок в Android. Я работаю над приложением, в котором мне нужно показать диалог, в котором пользователь может выбрать более одного элемента. Для этого я хочу добавить флажок к каждому элементу в диалоговом окне.

Я читаю следующие сообщения в StackOverflow:

Как добавить флажок в диалоговое окно предупреждения и

Диалоговое окно Android Checkbox (Easy)

В одном из этих сообщений описывается, как создать XML, определяющий флажок в дополнение к раздуванию диалога, но я не мог заставить его работать.

4b9b3361

Ответ 1

Добавление флажка в AlertDialog хорошо объяснено в блоге с примером AlertDialog с CheckBox в Android

Вы можете посетить блог AlertDialog с CheckBox в Android для более подробной информации, а ниже взято из того же блога

final CharSequence[] items = {" Easy "," Medium "," Hard "," Very Hard "};
// arraylist to keep the selected items
final ArrayList seletedItems=new ArrayList();

AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Select The Difficulty Level")
.setMultiChoiceItems(items, null, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
        if (isChecked) {
            // If the user checked the item, add it to the selected items
            seletedItems.add(indexSelected);
        } else if (seletedItems.contains(indexSelected)) {
            // Else, if the item is already in the array, remove it
            seletedItems.remove(Integer.valueOf(indexSelected));
        }
    }
}).setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int id) {
        //  Your code when user clicked on OK
        //  You can write the code  to save the selected item here
    }
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int id) {
        //  Your code when user clicked on Cancel
    }
}).create();
dialog.show();

Ответ 2

Ответ может быть лучше! второй аргумент в alerBuilder.setMultiChoiceItems() представляет собой логический массив, используемый для идентификации проверенных элементов перед отображением диалога и определения отмеченных элементов после нажатия кнопки "Положительная кнопка", поэтому код может выглядеть следующим образом:

AlertDialog.Builder alerBuilder = new AlertDialog.Builder(this);
        final DBHelper dbHelper = new DBHelper(this);
        final List<MeasurementDevice> totalDeviceList = dbHelper.getAllDevices();
        String[] deviceNameArr = new String[totalDeviceList.size()];
       final boolean[] selectedItems = new boolean[totalDeviceList.size()];
        for(int i = 0 ; i < deviceNameArr.length ; i++){
            deviceNameArr[i] = totalDeviceList.get(i).getName();
            selectedItems[i] = false;
            for(int j = 0 ; j < measurementDeviceArrayList.size() ; j++){
                if(measurementDeviceArrayList.get(j).getId() == totalDeviceList.get(i).getId()){
                    selectedItems[i] = true;
                    break;
                }
            }
        }
        alerBuilder.setMultiChoiceItems(deviceNameArr,selectedItems,new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                Log.e("CheckStatus",String.valueOf(b));
            }
        }).setPositiveButton(R.string.ok_ww,new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int ii) {

                for(int i = 0 ; i < selectedItems.length ; i++)
                Log.e("Sizzz",String.valueOf(selectedItems[i]));
            }
        }).setCancelable(false).setTitle(R.string.add_device).create().show();

Ответ 3

Если вы хотите добавить CheckBox со значком в AlertDialog, вы можете настроить его как

public class DialogMultipleChoiceAdapter extends BaseAdapter {
    LayoutInflater mLayoutInflater;
    List<Item> mItemList;

    public DialogMultipleChoiceAdapter(Context context, List<Item> itemList) {
        mLayoutInflater = LayoutInflater.from(context);
        mItemList = itemList;
    }

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

    @Override
    public Item getItem(int i) {
        return mItemList.get(i);
    }

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

    public List<Item> getCheckedItem() {
        List<Item> checkedItemList = new ArrayList<>();
        for (Item item : mItemList) {
            if (item.isChecked()) {
                checkedItemList.add(item);
            }
        }
        return checkedItemList;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = mLayoutInflater.inflate(R.layout.item, null);
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        final Item item = getItem(position);
        holder.tvTitle.setText(item.getTitle());
        holder.ivImage.setImageResource(item.getImageRes());

        holder.checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                item.setChecked(!item.isChecked());
                updateItemState(holder, item.isChecked());
            }
        });
        updateItemState(holder, item.isChecked());
        return convertView;
    }

    private void updateItemState(ViewHolder holder, boolean checked) {
        holder.root.setAlpha(checked ? 1 : 0.8f);
        holder.checkbox.setChecked(checked);
    }

    private static class ViewHolder {
        View root;
        TextView tvTitle;
        ImageView ivImage;
        CheckBox checkbox;

        ViewHolder(View view) {
            root = view;
            tvTitle = view.findViewById(R.id.text);
            ivImage = view.findViewById(R.id.image);
            checkbox = view.findViewById(R.id.checkbox);
        }
    }
}

item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="5dp"
    >
    <ImageView
        android:id="@+id/image"
        android:layout_width="38dp"
        android:layout_height="38dp"
        android:src="@mipmap/ic_launcher"
        />
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginStart="8dp"
        android:layout_toEndOf="@id/image"
        tools:text="AA"
        />
    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        />
</RelativeLayout>

Item модель

class Item {
    private String title;
    private int imageRes;
    private boolean checked;

    public Item(String title, int imageRes) {
        this.title = title;
        this.imageRes = imageRes;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getImageRes() {
        return imageRes;
    }

    public void setImageRes(int imageRes) {
        this.imageRes = imageRes;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }
}

Наконец,

List<Item> itemList = new ArrayList<>();

public void show() {
    if (itemList.isEmpty()) {
        itemList.add(new Item("A", R.mipmap.ic_launcher));
        itemList.add(new Item("B", R.mipmap.ic_launcher));
        itemList.add(new Item("C", R.mipmap.ic_launcher));
    }

    final DialogMultipleChoiceAdapter adapter =
            new DialogMultipleChoiceAdapter(mContext, itemList);

    new AlertDialog.Builder(mContext).setTitle("Select Image")
            .setAdapter(adapter, null)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(mContext,
                            "getCheckedItem = " + adapter.getCheckedItem().size(),
                            Toast.LENGTH_SHORT).show();
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            })
            .show();
}

введите описание изображения здесь Демо на Github