2010-12-14 19 views
0

Ich habe meine ListActivity, dass, wenn Sie auf ein Element tippen, öffnet es einen Dialog, der den Benutzer nach Benutzer und Passwort fragt. Wie kann ich die ausgewählte Position aus dem Dialog erhalten?Access AdapterView von Dialog

Hier ist, wie ich die ListActivity initialisieren:

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

ListView listView = getListView(); 
listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
    int position, long id) { 
    showDialog(DIALOG_USER_PASSWORD); 
    } 
}); 
} 

Der Dialog I Pop-up ist ein einfacher Alertdialog mit 2 EditText, die ich aus einer XML-Datei aufblasen

protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     ... 
     case DIALOG_USER_PASSWORD: 
      LayoutInflater factory = LayoutInflater.from(this); 
         final View dialogView = factory.inflate(R.layout.alert_dialog_text_entry, null); 
         return new AlertDialog.Builder(MyListActivity.this) 
         .setIcon(R.drawable.alert_dialog_icon) 
         .setTitle(R.string.ask_user_password) 
         .setView(dialogView) 
         .setPositiveButton(R.string.ok_text, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        String userName = ((EditText) findViewById(R.id.username_edit_alert_dialog)) 
          .getText().toString(); 
        String password = ((EditText) findViewById(R.id.password_edit_alert_dialog)) 
          .getText().toString(); 
        Credentials cred = new CredentialsL1(userName, password); 

        /* HERE IS WHERE i NEED THE SELECTED ITEM 
        mId IS THE OBJECT ASSOCIATED TO THE SELECTED POSITION */ 
        mService.connect(mId, cred); 

        } 
       }) 
       // Cancel button 
       .setNegativeButton(R.string.cancel_text, 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int whichButton) { 
          dialog.cancel(); 
         } 
        }) 
       .create(); 
     } 
     return null; 
    } 

Die einzig Ich bin gekommen, up with erzeugt ein neues Feld "mId" und setzt es, wenn der Benutzer auf ihn tippt und verwendet, wenn der Benutzer im Dialog auf OK klickt. Irgendeine elegantere Idee? Dank

Antwort

1
private int selectedPosition; 
... 
protected void onCreate(Bundle savedInstanceState) { 
.... 
// inside the item listener... 
selectedPosition = position; 
showDialog(DIALOG_USER_PASSWORD); 

/* HERE IS WHERE i NEED THE SELECTED ITEM 
mId IS THE OBJECT ASSOCIATED TO THE SELECTED POSITION */ 
// just use selectedPosition var 

Jede elegantere Idee?

Es scheint, dass Sie eine normale Listview (kein Kästchen eins) verwenden ... so, es ist in Ordnung es auf diese Art und Weise zu tun.

Verwandte Themen