![](/img/trans.png)
[英]How do i call a method of an Activity from its Recycler View Adapter? Or better,How to access the UI elements of an activity from the 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.