web-dev-qa-db-fra.com

est-il possible de créer une liste dans le dialogue?

j'ai créé une classe de dialogue personnalisée

public class NewPost extends Dialog
{
// functionality

}

maintenant, mon exigence est de créer une liste de contrôle à l'intérieur. Je sais que nous pouvons créer des zones de texte, des boutons, une liste déroulante à l'intérieur.

mais pour créer une vue liste, nous devrions hériter de notre classe de la classe listActivity

ce que vous suggérez est-il possible ou non si oui, alors comment y parvenir en utilisant une interface ou quoi?

32
UMAR

Vous n'avez pas vraiment vraiment besoin d'étendre listActivity pour pouvoir utiliser les vues de liste.

L'extension de listActivity vous donnera certaines fonctionnalités gratuitement, telles que getListView() (si je me souviens bien du nom de la méthode), mais cela peut tout aussi bien être fait manuellement avec findViewById() comme n'importe quel autre affichage.

11
David Hedlund

cette implémentation ne vous oblige pas à faire des mises en page XML. il a été écrit sous la forme d'une instruction case dans "onCreateDialog", mais vous pouvez l'adapter si, pour vos besoins, très facilement:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select Color Mode");

ListView modeList = new ListView(this);
String[] stringArray = new String[] { "Bright Mode", "Normal Mode" };
ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, Android.R.id.text1, stringArray);
modeList.setAdapter(modeAdapter);

builder.setView(modeList);
final Dialog dialog = builder.create();

dialog.show();

étant donné que vous créez une boîte de dialogue avec uniquement une liste, vous définissez onItemClickListener de la liste, car il n'y en a pas pour la classe de boîte de dialogue de base.

modeList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            switch(i) {
                case 0:
                    //do something for first selection
                    break;
                case 1:
                    //do something for second selection
                    break;
            }
            dialog.dismiss();
        }
    });
64
moonlightcheese

Oui.

Vous pouvez toujours utiliser un ListView dans un dialogue. Et vous n'avez certainement pas nécessairement besoin de ListActivity pour créer ListView.

Le code peut être quelque chose comme ceci:

Dialog dlg = new Dialog(context);
LayoutInflater li = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.my_layout, null, false);
dlg.setContentView(v);
dlg.show();

my_layout.xml:

<ScrollView xmlns:Android="blah"
   Android:id="xid"
   Android:layout_height="h"
   Android:layout_width="w">

  <ListView blah blah blah attributes
  />

 </ScrollView>
51
Gaurav Vaish

La manière la plus simple possible:

    ListView listView = new ListView(this);
    listView.setAdapter(new ArrayAdapter<String>(this, Android.R.layout.simple_list_item_1, new String[] {"item 1", "item 2", "item 3"}));
    Dialog dialog = new Dialog(this);
    dialog.setContentView(listView);
    dialog.show();
4
konmik

Vous pouvez créer une boîte de dialogue personnalisée avec cette disposition:

<?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"
    Android:gravity="center_vertical|center_horizontal"
    Android:background="@drawable/dialogs">
    <RelativeLayout 
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:paddingLeft="20dip"
        Android:paddingRight="20dip"
        Android:paddingTop="10dip">
        <ImageView 
            Android:id="@+id/dialog_title_image"
            Android:layout_alignParentLeft="true"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:background="@drawable/info"/>
        <TextView 
            Android:id="@+id/dialog_title"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dip"
            Android:layout_marginTop="20dp"
            Android:layout_centerInParent="true"
            Android:text="Title"
            Android:layout_toRightOf="@id/dialog_title_image"
            Android:textColor="@Android:color/black"
            Android:textSize="20sp"/>

        <!-- Lista -->
    </RelativeLayout>
    <TextView 
            Android:layout_width="fill_parent"
            Android:layout_height="3dip"
            Android:background="#1e90ff"/>
    <ListView
            Android:id="@+id/component_list"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

    <!-- Fine lista -->

    <RelativeLayout 
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:paddingTop="10dip"
        Android:paddingLeft="10dp"
        Android:paddingRight="10dp"
        Android:layout_marginLeft="20dp"
        Android:layout_marginRight="20dp"
        Android:gravity="bottom|center_horizontal"
        Android:paddingBottom="20dip">
        <Button 
            Android:id="@+id/positive_button"
            Android:layout_alignParentLeft="true"
            Android:layout_width="120dip"
            Android:layout_height="wrap_content"
            Android:background="#1e90ff"
            Android:textColor="@Android:color/white"
            Android:text="@string/close"/>

    </RelativeLayout>
</LinearLayout>

créez également une mise en page personnalisée pour chaque élément si vous le souhaitez:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingTop="10dp"
    Android:paddingBottom="10dp"
    Android:paddingLeft="10dp"
    Android:orientation="vertical" >

    <TextView
        Android:id="@+id/title"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Large Text"
        Android:textStyle="bold"
        Android:textAppearance="?android:attr/textAppearanceLarge" />


    <TextView
        Android:id="@+id/subtitle"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Small Text"
        Android:textAppearance="?android:attr/textAppearanceSmall" />


</LinearLayout>

puis utilisez un arraylist pour remplir la liste et définir la vue:

        //creation and population of the list
        List<Component> my_list = new ArrayList<Component>();
        createComponents();

        //adapter
        array_adapter = new ComponentAdapter(context, R.layout.component,my_list);

        //button to show the dialog
        Button button = (Button)findViewById(R.id.button1);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                list_dialog = new Dialog(context);
                list_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                list_dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                list_dialog.setContentView(R.layout.list_dialog);

                ListView list = (ListView)list_dialog.findViewById(R.id.component_list);
                list.setAdapter(array_adapter);

                Button positiveButton = (Button) list_dialog.findViewById(R.id.positive_button);

                positiveButton.setOnClickListener(new OnClickListener(){

                    @Override
                    public void onClick(View arg0) {

                        list_dialog.dismiss();  
                    }
                });

                list_dialog.show();     
            }
        });


    }

Références: http://pillsfromtheweb.blogspot.it/2014/10/Android-listview-inside-alertdialog.html#links

Résultat:enter image description here

3
SegFault

Vous pouvez utiliser n’importe quelle disposition pour les dialogues d’alerte. Si vous voulez une listview je le ferais comme ici

0
George Theodorakis