9 ответов:
используется ниже кода для отображения пользовательского списка в AlertDialog
AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this); builderSingle.setIcon(R.drawable.ic_launcher); builderSingle.setTitle("Select One Name:-"); final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, android.R.layout.select_dialog_singlechoice); arrayAdapter.add("Hardik"); arrayAdapter.add("Archit"); arrayAdapter.add("Jignesh"); arrayAdapter.add("Umang"); arrayAdapter.add("Gatti"); builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String strName = arrayAdapter.getItem(which); AlertDialog.Builder builderInner = new AlertDialog.Builder(DialogActivity.this); builderInner.setMessage(strName); builderInner.setTitle("Your Selected Item is"); builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); } }); builderInner.show(); } }); builderSingle.show();
согласно документации, есть три вида списков, которые могут быть использованы с
AlertDialog:
- традиционный список с одним выбором
- постоянный список с одним выбором (переключатели)
- постоянный список множественного выбора (флажки)
я приведу пример ниже.
традиционный список с одним выбором
способ сделать традиционный список с одним выбором это использовать
setItems.// setup the alert builder AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Choose an animal"); // add a list String[] animals = {"horse", "cow", "camel", "sheep", "goat"}; builder.setItems(animals, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: // horse case 1: // cow case 2: // camel case 3: // sheep case 4: // goat } } }); // create and show the alert dialog AlertDialog dialog = builder.create(); dialog.show();нет необходимости в кнопке OK, потому что как только пользователь нажимает на элемент управления списка возвращается в
OnClickListener.список переключателей
преимущество списка переключателей над традиционным списком заключается в том, что пользователь может видеть, что такое текущая настройка. Способ сделать список переключателей заключается в использовании
setSingleChoiceItems.// setup the alert builder AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Choose an animal"); // add a radio button list String[] animals = {"horse", "cow", "camel", "sheep", "goat"}; int checkedItem = 1; // cow builder.setSingleChoiceItems(animals, checkedItem, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // user checked an item } }); // add OK and Cancel buttons builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // user clicked OK } }); builder.setNegativeButton("Cancel", null); // create and show the alert dialog AlertDialog dialog = builder.create(); dialog.show();я жестко закодировал выбранный элемент здесь, но вы можете отслеживать его с помощью переменной-члена класса в реальном проекте.
список чекбокс
способ сделать список флажков-использовать
setMultiChoiceItems.// setup the alert builder AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Choose some animals"); // add a checkbox list String[] animals = {"horse", "cow", "camel", "sheep", "goat"}; boolean[] checkedItems = {true, false, false, true, false}; builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { // user checked or unchecked a box } }); // add OK and Cancel buttons builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // user clicked OK } }); builder.setNegativeButton("Cancel", null); // create and show the alert dialog AlertDialog dialog = builder.create(); dialog.show();здесь я жестко на какие пункты в списке уже были проверены. Более вероятно, что вы захотите отслеживать их в
ArrayList<Integer>. Смотрите пример документации для более подробной информации. Вы также можете установить отмеченные элементы вnullесли вы всегда хотите, чтобы все начать бесконтрольно.Примечания
- на
contextв коде выше, не используйтеgetApplicationContext()или вы получитеIllegalStateException(см. здесь почему). Вместо этого получите ссылку на контекст действия, например с помощьюthis.- вы также можете заполнить список товаров из базы данных или другого источника используя
setAdapterилиsetCursorили проходя вCursorилиListAdapterнаsetSingleChoiceItemsилиsetMultiChoiceItems.- если список длиннее, чем поместится на экране, то диалоговое окно будет автоматически прокручивать его. Если у вас действительно длинный список, я предполагаю, что вы, вероятно, должны сделать настраиваемые диалоговые С RecyclerView.
чтобы проверить все примеры выше, у меня просто был простой проект с помощью одной кнопки, чем показал диалог при нажатии:
import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); context = this; } public void showAlertDialogButtonClicked(View view) { // example code to create alert dialog lists goes here } }по теме
вы можете использовать пользовательский диалог.
пользовательский макет диалогового окна.
list.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ListView android:id="@+id/lv" android:layout_width="wrap_content" android:layout_height="fill_parent"/> </LinearLayout>в работе
Dialog dialog = new Dialog(Activity.this); dialog.setContentView(R.layout.list) ListView lv = (ListView ) dialog.findViewById(R.id.lv); dialog.setCancelable(true); dialog.setTitle("ListView"); dialog.show();Edit:
С помощью alertdialog
String names[] ={"A","B","C","D"}; AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this); LayoutInflater inflater = getLayoutInflater(); View convertView = (View) inflater.inflate(R.layout.custom, null); alertDialog.setView(convertView); alertDialog.setTitle("List"); ListView lv = (ListView) convertView.findViewById(R.id.lv); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,names); lv.setAdapter(adapter); alertDialog.show();таможни.xml
<?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>Snap
final CharSequence[] items = {"A", "B", "C"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Make your selection"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { // Do something with the selection mDoneButton.setText(items[item]); } }); AlertDialog alert = builder.create(); alert.show();
используйте "
import android.app.AlertDialog;" импорт, а затем вы пишетеString[] items = {"...","...."}; AlertDialog.Builder build = new AlertDialog.Builder(context); build.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //do stuff.... } }).create().show();
как новичок я бы предложил вам пройти http://www.mkyong.com/android/android-custom-dialog-example/
я кратко изложу, что он в основном делает
- создает XML-файл для диалога и основной деятельности
- в основной деятельности в нужном месте создается объект класса android
Dialog- добавляет пользовательский стиль и текст на основе XML-файла
- называет
dialog.show()метод.
Это слишком просто
final CharSequence[] items = {"Take Photo", "Choose from Library", "Cancel"}; AlertDialog.Builder builder = new AlertDialog.Builder(MyProfile.this); builder.setTitle("Add Photo!"); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { if (items[item].equals("Take Photo")) { getCapturesProfilePicFromCamera(); } else if (items[item].equals("Choose from Library")) { getProfilePicFromGallery(); } else if (items[item].equals("Cancel")) { dialog.dismiss(); } } }); builder.show();
разве не проще сделать метод, который будет вызываться после создания блока EditText в AlertDialog, для общего использования?
public static void EditTextListPicker(final Activity activity, final EditText EditTextItem, final String SelectTitle, final String[] SelectList) { EditTextItem.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle(SelectTitle); builder.setItems(SelectList, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int item) { EditTextItem.setText(SelectList[item]); } }); builder.create().show(); return false; } }); }
В Котлин:
fun showListDialog(context: Context){ // setup alert builder val builder = AlertDialog.Builder(context) builder.setTitle("Choose an Item") // add list items val listItems = arrayOf("Item 0","Item 1","Item 2") builder.setItems(listItems) { dialog, which -> when (which) { 0 ->{ Toast.makeText(context,"You Clicked Item 0",Toast.LENGTH_LONG).show() dialog.dismiss() } 1->{ Toast.makeText(context,"You Clicked Item 1",Toast.LENGTH_LONG).show() dialog.dismiss() } 2->{ Toast.makeText(context,"You Clicked Item 2",Toast.LENGTH_LONG).show() dialog.dismiss() } } } // create & show alert dialog val dialog = builder.create() dialog.show() }






Comments