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?
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.
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();
}
});
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>
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();
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:
Vous pouvez utiliser n’importe quelle disposition pour les dialogues d’alerte. Si vous voulez une listview je le ferais comme ici