在AlertDialog的Onclick上调用另一个类的方法

时间:2017-06-21 06:17:49

标签: java android

我是Android开发的新手,我有一个天气应用程序,我的WeatherFragment类得到了代码,这是一个片段类。

btn=(Button)rootView.findViewById(R.id.button);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle("Change city");
            final EditText input = new EditText(getActivity());
            input.setInputType(InputType.TYPE_CLASS_TEXT);
            builder.setView(input);
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    MainActivity obj=new MainActivity();
                  obj.changeCityLocation(input.getText().toString());
                }
            });
            builder.show();
        }
    });
    return rootView;
} 

我需要拨打changeCityLocation()中的MainActivity,代码是:

public void changeCityLocation(String city){
    WeatherFragment wf = (WeatherFragment)getSupportFragmentManager()
            .findFragmentById(R.id.container);
    wf.changeCity(city);
    new CityPreference(this).setCity(city);
}

当我点击确定但我崩溃时,我需要输入并存储在城市变量中。提前谢谢大家。

1 个答案:

答案 0 :(得分:0)

你这里做错了

MainActivity obj=new MainActivity();

因为这是不可能的。 android中的所有活动必须经历活动生命周期,以便它们具有附加到活动的有效上下文。所以你必须使用getActivity()方法来获取父活动对象,然后将其强制转换为MainActivity。像这样

((MainActivity) getActivity()).changeCityLocation(input.getText().toString());

这将允许您从片段访问父活动方法。