2010-05-20 9 views
32

he creado una clase de diálogo personalizado¿es posible crear una vista de lista dentro del cuadro de diálogo?

public class NewPost extends Dialog 
{ 
// functionality 

} 

ahora mi requisito es crear vista de lista en su interior. Sé que podemos crear cuadros de texto, botones, lista desplegable dentro de él.

pero con el fin de crear la vista de lista que debemos heredar nuestra clase de la clase ListActivity

lo que sugiere que es posible o no, si sí, entonces cómo lograr esto usando cualquier interfaz o qué?

Respuesta

11

Usted no realmente tiene que extender listActivity para usar listviews.

Extendiendo listActivity le dará algunas funciones de forma gratuita, como getListView() (si recuerdo correctamente el nombre del método), pero que puede muy bien ser hecho manualmente con findViewById() al igual que cualquier otro punto de vista.

+0

pegado en mismo puede ayudar a cualquier persona http://stackoverflow.com/questions/29446088/how-to-get- spinner-values-in-textview/29487383? noredirect = 1 # comment47175570_29487383 –

52

Sí.

Siempre puede usar un ListView dentro de un cuadro de diálogo. Y definitivamente no necesita necesariamente ListActivity para crear ListView.

Código puede ser algo como esto:

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> 
+2

¿cómo llenarías la lista en el cuadro de diálogo aquí? – lathomas64

+5

'ListView v = (ListView) dlg.findViewById (R.id.list_view_in_your_my_layout);' A continuación, cree un adaptador y configúrelo. – Enigma

+57

Buena idea en general, pero [no se recomienda poner una vista de lista dentro de un scrollView] (http://stackoverflow.com/questions/6210895/listview-inside-scrollview-is-not-scrolling-on-android). – greg7gkb

63

esta implementación no requiere que usted para hacer cualquier diseños XML. que fue escrito como una declaración en caso de anulación "onCreateDialog", pero se puede adaptar si para sus propósitos muy fácilmente:

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

Tenía la esperanza de usar esto para elegir una selección de un diálogo, pero cuando agregué un onItemClickListener no pude acceder a dialog.dismiss() desde onItemClick. Estoy seguro de que alguien más listo que yo puede conectarlo, pero tenga en cuenta que esta respuesta necesita más código para ser útil. – Jeff

+0

Simplemente declare la variable de diálogo como privada en la parte superior de su clase y luego llame a dialog.dismiss() en el evento de clic. Funcionó para mí – Nick

+3

Jeff - eso es porque ListView.OnItemClickListener no le da el parámetro de diálogo en la forma en que lo hace DialogInterface.OnMultiChoiceClickListener. declarar el diálogo como final debe encargarse de esto y permitirle acceder al diálogo dentro de su anulación. hth. – moonlightcheese

0

Se puede utilizar cualquier diseño de cuadros de diálogo de alerta. Si quieres una vista de lista que lo haría como here

3

La manera más simple posible:

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

Se puede crear un diálogo personalizado con este diseño:

<?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> 

crear un diseño personalizado también para cada elemento si lo desea:

<?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> 

y luego utilice una lista de arrays para completar la lista y establecer la vista:

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


    } 

Referencias: http://pillsfromtheweb.blogspot.it/2014/10/android-listview-inside-alertdialog.html#links

Resultado: enter image description here

Cuestiones relacionadas