webentwicklung-frage-antwort-db.com.de

ist es möglich, eine Listenansicht im Dialog zu erstellen?

ich habe eine benutzerdefinierte Dialogklasse erstellt

public class NewPost extends Dialog
{
// functionality

}

jetzt ist es meine Anforderung, Listenansicht darin zu erstellen. Ich weiß, dass wir Textfelder, Schaltflächen und Dropdown-Listen erstellen können.

um jedoch eine Listenansicht erstellen zu können, sollten wir unsere Klasse von der ListActivity-Klasse erben

was schlägst du vor? Ist es möglich oder nicht, wenn ja, wie soll dies mit einer beliebigen Schnittstelle erreicht werden oder was?

32
UMAR

Sie müssen nicht wirklich listActivity erweitern, um Listenansichten verwenden zu können.

Wenn Sie listActivity erweitern, erhalten Sie einige Funktionen kostenlos, z. B. getListView() (wenn ich den Methodennamen richtig abrufe). Dies kann jedoch genauso wie jede andere Ansicht manuell mit findViewById() durchgeführt werden.

11
David Hedlund

für diese Implementierung müssen Sie keine XML-Layouts erstellen. es wurde als case-Anweisung in "onCreateDialog" geschrieben, aber Sie können dies ganz leicht anpassen:

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

da Sie einen Dialog nur mit einer ListView erstellen, legen Sie den onItemClickListener der ListView fest, da es keinen Dialog für die grundlegende Dialogklasse gibt.

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

Ja.

Sie können immer eine ListView innerhalb eines Dialogs verwenden. Und Sie benötigen definitiv nicht unbedingt ListActivity, um ListView zu erstellen.

Code kann so aussehen:

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

Der einfachste mögliche Weg:

    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

Sie können mit diesem Layout einen benutzerdefinierten Dialog erstellen:

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

erstellen Sie ein benutzerdefiniertes Layout für jedes Element, wenn Sie möchten:

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

und verwenden Sie dann eine Arrayliste, um die Liste aufzufüllen und die Ansicht festzulegen:

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


    }

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

Ergebnis:enter image description here

3
SegFault

Sie können ein beliebiges Layout für Alarmdialoge verwenden. Wenn Sie eine Listenansicht wünschen, würde ich es gerne tun hier

0