Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从适配器类调用活动方法_Java_Android_Android Arrayadapter - Fatal编程技术网

Java 如何从适配器类调用活动方法

Java 如何从适配器类调用活动方法,java,android,android-arrayadapter,Java,Android,Android Arrayadapter,我有三节课 mainActivity.java public class mainactivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.abc); } public void firs

我有三节课

mainActivity.java

public class mainactivity extends AppCompatActivity{

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.abc);

} 


public void firstDialog()
{

  //Do something
  //call next method

  secondDialog()

}

public void secondDialog()
{
  //Do something
}

}
接下来是另一个调用适配器类的类 secondclass.java

public class secondclass extends AppCompatActivity {


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xyz);

        //calling and set adaptor
        adapter=new Myadaptopr(this,result);
        recyclerlist.setAdapter(adapter);

}
//现在是适配器类

    public class Myadaptopr extends RecyclerView.Adapter<Myadaptopr.ViewHolder> {


     @Override
        public void onBindViewHolder(final MedicineAdaptor.ViewHolder holder, int position) {
       //In this function I need to call firstDialog() Method How Do I proceed.

    }

}
公共类MyAdapteOpr扩展了RecyclerView.Adapter{
@凌驾
BindViewHolder上的公共无效(最终MedicineAdapter.ViewHolder,内部位置){
//在这个函数中,我需要调用firstDialog()方法如何继续。
}
}
我的问题是:

如何调用mainactivity.java类文件的方法。 我尝试了以下解决方案: 但不起作用,因为mainactivity类不调用并设置适配器。
((mainactivity)context.firstDialog()

MainActivity已经停止,因此从该类调用函数没有意义。如果要从适配器调用活动方法,请在创建适配器时在构造函数中传递活动引用。确保要从适配器调用的方法声明为“public”。要调用适配器,只需使用活动引用并调用方法

class MainActivity {
    onCreate() {
        CustomAdapter ca = new CustomAdapter(MainActivity.this);
    }

    public methodA() {
    }
}

class CustomAdapter {

    Activity mActivity;    

    CustomAdapter(Activity activity) {
        mActivity = activity;
    }

    // Call to function
    mActivity.methodA();
}

我建议您使用接口:

首先创建一个接口:

public interface myInterface{

  void myMethod();
}
现在,您可以从“活动”扩展接口:

public class mainactivity extends AppCompatActivity implements myInterface
该方法现在需要
覆盖
注释

在这一点上,您可以简单地(从任何有上下文的地方)调用

你完成了

希望这有帮助,对于任何问题都可以自由提问

编辑 我还有话要说

针对您的目标解决方案:

第一个活动上下文
作为
意图
的参数传递给
第二个活动
。然后使用此
上下文创建
适配器
,而不是使用
第二个活动
的“

你应该做什么

使用静态方法创建外部类(新文件)

创建此方法:

public class MyExternalClass{

  public static void myMethod(){
     //do stuff
  }
}
现在,如果需要此方法,请调用以下命令:

MyExternalCkass.myMethod();

您就完成了。

什么时候会显示对话框?是否有任何按钮单击?尝试使用回调为什么人们会投票反对该问题。如果我的问题有任何错误,请告诉我。我会改正的。但请在否决投票前让我知道我可以更准确地写出问题。
mainactivity act=newmainActivity()并将方法调用为
act.firstDialog()这只是为了表示。它可以是点击按钮呼叫或正常呼叫@kgandroidNot help@阿诸我的观点是,主活动不是活动的活动,那么你为什么要首先称之为活动呢。在“secondclass”中添加该功能,并使用上面的答案代码调用它。我需要在其中定义接口。。。在mainactivity或适配器类中,在单独的类文件@AnkurKhandelwalHow中,我将如何将上下文传递给适配器类。因为我不是直接给它打电话。。或context=mainactivity。这将表明您正在传递“活动”。用这个@AnkurKhandelwal@AnkurKhandelwal((myInterface)活动).myMethod();
MyExternalCkass.myMethod();