32 votes

est-il possible de créer une liste dans la boîte de 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 en 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?

Toute aide serait appréciée.

64voto

moonlightcheese Points 4818

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();
 

51voto

MasterGaurav Points 4753

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>
 

11voto

David Hedlund Points 66192

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

L'extension de listActivity vous donnera des fonctionnalités gratuites, telles que getListView() (si je rappelle correctement le nom de la méthode), mais cela peut tout aussi bien être fait manuellement avec findViewById() comme n'importe quelle autre vue.

4voto

konmik Points 121

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();
 

3voto

SegFault Points 120

Vous pouvez créer un dialogue personnalisé avec cette mise en page:

<?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éer une mise en page personnalisée aussi pour chaque article, 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>

et puis utiliser une arraylist pour remplir la liste et 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X