繁体   English   中英

如何从 Adapter 类调用活动方法

[英]How do I call activity method from Adapter class

我有三个班级

主活动.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);

}

//现在是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.

    }

}

我的问题是:

我如何调用 mainactivity.java 类文件的方法。 我尝试过解决方案:但没有用,因为 mainactivity 类不调用和设置适配器。 ((mainactivity)context).firstDialog();

我建议你使用接口:

首先创建一个接口:

public interface myInterface{

  void myMethod();
}

现在您可以从活动扩展接口:

public class mainactivity extends AppCompatActivity implements myInterface

该方法现在需要override注释。

此时你可以简单地调用(从任何有上下文的地方)

((myInterface) context).myMethod();

你已经完成了。

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

编辑

我还得多说几句。

对于您的目标解决方案:

first activity context作为intent的参数传递给second activity 然后使用此context而不是second activity的“ this ”创建adaptor

你应该做什么

创建一个带有静态方法的外部类(一个新文件)。

创建此方法:

public class MyExternalClass{

  public static void myMethod(){
     //do stuff
  }
}

现在,当您需要此方法时,请调用以下内容:

MyExternalCkass.myMethod();

你已经完成了。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM