2016-06-08 38 views
-1

Ich möchte einen AlertDialog generieren, der eine ListView enthält. Suche, fand ich, dass der bessere Weg, dies zu tun, ist mit ArrayAdapter.AlertDialog mit ArrayAdapter für eine dynamische ListView

Ich versuche ganze Web und es funktioniert einfach nicht. Der folgende Code tut einiges nicht, weil ich nicht weiß, wie ich vorgehen soll.

Ich muss den ListView oder den Adapter aktualisieren? Woher?

Hier ist die Methode, die ich aufrufen, wenn die Taste gedrückt wird (ps. Mit onButtonClick (Ansicht anzeigen)).

private void showAlertDialog() 
{ 
    ListView listView = new ListView(this); 

    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item); 
    arrayAdapter.add("a"); 
    arrayAdapter.add("b"); 
    arrayAdapter.add("c"); 

    listView.setAdapter(arrayAdapter); 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> arg0, View view, int pos, long id) 
     { 
      Toast.makeText(getApplicationContext(), "item clicked at index " + pos, Toast.LENGTH_SHORT).show(); 
      // Here I call a method to update listView? 
     } 
    }); 

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this); 
    dialogBuilder.setTitle("My Dialog"); 

    dialogBuilder.setView(listView); 

    dialogBuilder.setPositiveButton("OK", null); // TODO 
    dialogBuilder.setNegativeButton("Cancel", null); // nothing simply dismiss 

    AlertDialog dialog = dialogBuilder.show(); 
    dialog.show(); 
} 

Antwort

0

Sie müssen benutzerdefinierte Dialogklasse vornehmen.

So.

public class CustomDialog extends Dialog { 

    private ListView listView; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_custom_dialog); 
     listView=findViewById(R.id.listview); 


    } 
} 

In onCreate Methode können Sie neues Layout setzen, die eine Listenansicht hat.

Und Sie können listview Inhalte wie Sie in Frage gemacht haben.

+0

Aber wie kann ich Daten einfügen und aktualisieren? –

0

Zuerst müssen Sie eine benutzerdefinierte Layout für Ihren Alertdialog erstellen

dialog.xml 
<?xml version="1.0" encoding="utf-8"?> 
<ListView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

-Create benutzerdefinierte Benachrichtigung Dialog wie diese

public void createCustomDialog(Context context, String title) { 
     View dialogView = View.inflate(context,R.layout.dialog, null); 
     ListView lv= (ListView) dialogView.findViewById(R.id.listview); 
     lv.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, new String[] {"Item 1", "Item 2", "Item 3"})); 
     AlertDialog.Builder builder = new AlertDialog.Builder(context) 
             .setTitle(title) 
             .setView(dialogView) 
             .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

              @Override 
              public void onClick(DialogInterface dialog, int which) { 
               // TODO do something 
              } 
             }) 
             .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 

              @Override 
              public void onClick(DialogInterface dialog, int which) { 
               //TODO do something 
              } 
             }); 
     builder.create().show(); 

    } 

Hope this Hilfe!

+0

Vielleicht habe ich das Problem nicht sehr gut definiert ... Ich muss die Daten der Liste ändern, wenn ich auf ein Element klicke. –

+0

Welche Daten möchten Sie ändern? – ResolutioN

+0

Die "a", "b" und "c". –

Verwandte Themen