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

Java 在AlertDialog的Onclick上调用另一个类的方法,java,android,Java,Android,我是android开发新手,我有一个天气应用程序,我的WeatherFragment类在代码下面,这是一个片段类 btn=(Button)rootView.findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final AlertDialog.Bui

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

我需要在单击ok时获取输入并存储在city变量中,但它崩溃了。提前谢谢大家。

你们做错了

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

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

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

您在这里做错了

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

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

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

MainActivity
是活动还是普通java类?似乎这家伙正在创建主机活动的实例Make changeCityLocation是静态函数,并使用直接类名调用而不创建对象谢谢所有SIR
MainActivity
是活动还是普通java类?似乎这家伙正在制作一个主机活动的实例Make changeCityLocation是静态函数,并使用直接类名调用而不创建对象谢谢大家Sirsthank先生,我是Android新手,我只懂基本java,所以我会出错,亲爱的先生,如果你能给我一个提示,我可以从哪里学习正确的Android开发和Java。谢谢你,先生。@BikeshPawn只要在谷歌上搜索一下,你就会找到成千上万的开发教程。即使你也可以阅读官方文件。非常感谢,先生,我是Android新手,只懂基本的java,所以我遇到了一些错误,亲爱的先生,如果你能给我一个提示,我可以从哪里学习正确的Android开发和java。谢谢你,先生。@BikeshPawn只要在谷歌上搜索一下,你就会找到成千上万的开发教程。即使你也可以阅读官方文件。