android - getOwnerActivity 在自定义对话框中返回 null

标签 android dialog

我编写了一个自定义对话框并尝试从其父 Activity 中获取一些数据,但是当我调用 getOwnerActivity 时我总是得到 null,谁能告诉我为什么会这样?为什么在DemoDialog中可以显示数据,而在TestDialogActivity中显示数据失败?

非常感谢。

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);
    }
}

演示对话框

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;
    }
}

最佳答案

我尝试在我的自定义对话框 的所有可能方法中使用getOwnerActivity() 方法。它总是返回 null (Android 2.3)。然后我检查了它的源代码,它返回的 Activity 只在 setOwnerActivity(Activity activity) 中设置,它不会在任何地方调用。因此,如果您希望 getOwnerActivity() 返回不同于 null 的值,您必须这样做:

public MyCustomDialog(Context context) {
    super(context);
    if (context instanceof Activity) {
        setOwnerActivity((Activity) context);
    }
} 

关于android - getOwnerActivity 在自定义对话框中返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7543167/

相关文章:

android - Cordova - Android - 找不到文件错误

安卓 v2.2-2.3.5 : WebView : loadDataWithBaseURL : will only load page once

wpf - wpf 截止日期临近时弹出警报框

android - ImageView 的圆形背景

android - 如何在 Jetpack Compose 中实现 sp 和 % 等动态测量?

Android事件处理方法

java - Swing 中模态对话框的正确父级

java - (Java Swing) 停止 actionPerformed 命令直到对话框返回

java - Swing 将对话框绑定(bind)到 JButton

java - 如何使对话框中的整个 View 可点击?