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?
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.
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();
}
});
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>
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();
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:
Sie können ein beliebiges Layout für Alarmdialoge verwenden. Wenn Sie eine Listenansicht wünschen, würde ich es gerne tun hier