如何从Adapter类调用activity方法

时间:2016-10-03 10:16:41

标签: 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 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)上下文).firstDialog();

2 个答案:

答案 0 :(得分:2)

我建议你使用接口:

首先创建一个界面:

<div class="pagination"><?php echo $links; ?></div>     

现在您可以从活动扩展界面:

public interface myInterface{

  void myMethod();
}

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

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

override

你已经完成了。

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

修改

我必须多说些什么。

对于您的目标解决方案:

((myInterface) context).myMethod(); 作为first activity context的参数传递给intent。然后使用此second activity创建adaptor,而不是使用&#34; context&#34; this

你应该做什么

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

创建此方法:

second activity

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

public class MyExternalClass{

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

你已经完成了。

答案 1 :(得分:-1)

MainActivity已经停止,因此从该类调用函数没有意义。如果要从适配器调用Activity方法,请在创建适配器时在构造函数中传递Activity引用。确保要从适配器调用的方法声明为“public”。要调用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();
}