scrivo una finestra di dialogo personalizzata e cercare di ottenere alcuni dati dalla sua attività principale, ma ho sempre ottenere nulla quando chiamo getOwnerActivity, qualcuno potrebbe dirmi il motivo per cui questo accade? Perché posso mostrare i dati nel DemoDialog mentre non riesco a mostrare i dati da TestDialogActivity?getOwnerActivity restituisce null nella finestra di dialogo personalizzata
Molte grazie in anticipo.
DialogTestActivity
public class DialogTestActivity extends Activity {
List<String> data = new ArrayList<String>();
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
showDialog(0);
}
});
}
public List<String> getData(){
data.add("one");
data.add("two");
data.add("three");
return data;
}
public Dialog onCreateDialog(int id){
return new DemoDialog(this);
}
}
DemoDialog
public class DemoDialog extends Dialog {
Context context;
public DemoDialog(Context context) {
super(context);
setContentView(R.layout.dialog);
this.context = context;
setTitle("Delete City");
ListView list = (ListView)findViewById(R.id.list);
ArrayAdapter<String> aa = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_multiple_choice, ((DialogTestActivity)getOwnerActivity()).getData());
// ArrayAdapter<String> aa = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_multiple_choice, getData());
list.setAdapter(aa);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
private List<String> getData(){
List<String> data = new ArrayList<String>();
data.add("1");
data.add("2");
return data;
}
}
Nota: voglio dire la chiamata onCreate() della finestra di dialogo. Tuttavia, potrebbe essere necessario inserirlo in AttachedToWindow() se ciò non riesce, perché Android potrebbe in effetti differire la sua magia arbitrariamente. Detto questo, se hai bisogno di accedere al proprietario dal costruttore, il proprietario è "contesto", quindi usa "contesto" :) – Sajid
Grazie per la tua risposta, Sajid. Ho provato a seguire il tuo suggerimento ma il sitll è diventato nullo, potresti condividere il tuo codice? – eric2323223
Aggiunto come una modifica sopra. Dopotutto devi effettuare il check-in su AttackToWindow(). – Sajid