0

こんにちは私はメモリゲームのために2つのクラスを持っています:1つはメソッドを持っている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 : リスナーを抽象化し、抽象メソッド 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 に答える