【问题标题】:How to call main activity method in Recyclerview adapter class [closed]如何在 Recyclerview 适配器类中调用主要活动方法 [关闭]
【发布时间】:2019-06-10 11:05:45
【问题描述】:

假设我有一个公共方法名称 TestMe() 并且我想在 Recycler 视图适配器类中使用此方法,那么如何实现它。

我正在使用 as 先声明 MainActivity 活动=新 MainActivity(); 活动.TestMe();

但它显示错误空异常

【问题讨论】:

  • 你可以通过接口使用方法。
  • ((MainActivity)context).TestMe(); 将活动上下文传递给适配器。

标签: java android class android-fragments nullpointerexception


【解决方案1】:

在 Constructor 中传递您的 Activity 对 Adapter 的引用或通过 setter 方法设置它并调用您的 TestMe 方法。

if(activity instanceof MainActivity){
    ((MainActivity)activity).TestMe();
}

【讨论】:

    【解决方案2】:

    存储 Activity 引用不是一个好主意,因此请改用接口。

    创建界面

    interface MyInterface{
        public void textMe();
    }
    

    制作Activity实现接口

    class MainActivity implements MyInterface {
    …
    

    像这样在构造函数中将 MyInterface 实例传递给适配器

    public MyAdapter(MyInterface interface){
        this.interface = interface;
    }
    

    然后像这样使用

    this.interface.textMe();
    

    【讨论】:

      【解决方案3】:

      您不能通过MainActivity activity=new MainActivity(); 创建您的活动实例。

      正确的方法是使用 instanceof

      if(context instanceof MainActivity){
      
        MainActivity activity = (MainActivity)context;
        activity.TestMe(); 
      }
      

      【讨论】:

        【解决方案4】:

        在您创建和设置适配器的活动中,在构造函数中传递活动对象:

        setAdapter(new Adapter(this));
        

        将其存储在您的适配器中。

        Adapter(Activity act){
           this.act = act;
        }
        

        然后,使用活动对象调用此方法。

        act.TestMe();
        

        【讨论】:

        • 如果您使用支持库,请使用 AppCompatActivity 而不是 Activity。
        猜你喜欢
        • 2018-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        相关资源
        最近更新 更多