0

您好,我有 2 个记忆游戏课程:一个是有方法的 NV1,例如:

 public class Nv1 extends Activity{

protected int cardsUp;

protected int currentIndex = -1;

protected int lastIndex = -1;

protected int cardEquals = 0;

protected int lifes = 3;
protected TextView lifes_txt;

protected Handler handler;

protected int [] imgIds = {
        R.id.img_1,
        R.id.img_2,
        R.id.img_3,
        R.id.img_4,
};

另一个实现 OnClickListener 的类 NVListener。

   public class CardsListener implements OnClickListener{
   @Override
   public void onClick(View v) {

------------

我需要从我的 Activity 调用 CardsListener 的方法。我怎么能那样做?

4

1 回答 1

0

方法A:将监听器抽象化,在Activity中实现抽象方法onClick(推荐,监听器可以方便复用,更容易调试)

例子:

在 SampleActivity.java 中

public class SampleActivity extends Activity {
    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //Your code here.....
        // findViewById()..... etc.

        b.setOnClickListener(new SomeListener(){
            @Override
            public void onClick(View v) {
                someMethod();   
            }
        });

    }

     public void someMethod(){
        Log.d("Log Tag","Some Message");
     }


}

在 SomeListener.Java

//make it abstract
public abstract class SomeListener implements OnClickListener{
//put your own method,variables inside
//do not override onClick()

} 

方法 B:创建一个以 Activity 作为输入参数的构造函数。保存活动实例并自由调用其方法(不太推荐:不灵活,不符合逻辑 IMO)

在 SomeListener.Java

public class SomeListener implements OnClickListener {
    private SampleActivity mAct;

    public SomeListener(SampleActivity act){
        mAct = act;
    }
    @Override
    public void onClick(View v) {
         mAct.someMethod();
    }

}
于 2012-07-05T03:35:22.637 回答