tôi viết một hộp thoại tùy chỉnh và cố gắng để có được một số dữ liệu từ hoạt động mẹ của nó, nhưng tôi luôn có được rỗng khi tôi gọi getOwnerActivity, bất cứ ai có thể cho tôi biết tại sao điều này xảy ra? Tại sao tôi có thể hiển thị dữ liệu trong DemoDialog trong khi không hiển thị dữ liệu từ TestDialogActivity?getOwnerActivity trả về null trong hộp thoại tùy chỉnh
Rất cám ơn trước.
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;
}
}
Lưu ý: Tôi có nghĩa là các cuộc gọi onCreate() của Dialog. Tuy nhiên, bạn có thể cần phải đặt nó trong onAttachedToWindow() nếu điều đó không thành công, bởi vì Android có thể thực sự trì hoãn phép thuật tùy ý. Điều đó nói rằng, nếu bạn cần phải truy cập vào chủ sở hữu từ các nhà xây dựng, chủ sở hữu là "bối cảnh", vì vậy chỉ cần sử dụng "bối cảnh" :) – Sajid
Cảm ơn bạn đã trả lời của bạn, Sajid. Tôi đã cố gắng làm theo đề nghị của bạn nhưng sitll có null, bạn có thể vui lòng chia sẻ mã của bạn? – eric2323223
Đã thêm làm chỉnh sửa ở trên. Bạn phải kiểm tra trênAttachToWindow() sau khi tất cả. – Sajid