子类数组和onClick()

时间:2012-11-26 13:05:57

标签: android

我想通过代码创建一个对象数组,这些对象是Button的子类。

public class MyButton extends Button {
    private Context ctx;
    private int status;
    public MyButton(Context context) {
        super(context);
        ctx = context;
        status = 0;
    }

    private click() {
        status = 1;
        // OTHER CODE THAT NEEDS TO STAY HERE
    }
}

在主要活动中,我这样做:

public class myActivity extends Activity {
    private MyButton[] myButtons = new MyButton[100];

    @Override
    public onCreate(Bundle si) {
         super.onCreate(si);
         createButtons();
    }

    private void createButtons() {
         for (int w=0; w<100; w++) {
             myButtons[w] = new MyButton(myActivity.this);
             myButtons[w].setOnClickListener(new View.onClickListener() {
                  public void onClick(View v) {
                  // ... (A)
                  }
             });
         }
    }
}

现在我想要在每次单击按钮时运行MyButton中的click()方法。 看似显而易见,但它不在我眼前。

如果我将click()方法公开并直接从(A)运行,我会收到错误,因为myButtons [w] .click()不是静态的,不能从那里运行。

与此同时,我无法理解将代码放在MyButton类中的哪个位置来拦截点击并从那里运行click()。我应该覆盖onClick吗?或者我应该覆盖onClickListener?或者我还应该做些什么?

如果单击myButtons []对象之一,如何运行click()?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以将View v聆听者MyButton投射到click并致电private void createButtons() { View.OnClickListener listener = new View.onClickListener() { public void onClick(View v) { ((MyButton) v).click(); } }; for (int w=0; w<100; w++) { myButtons[w] = new MyButton(myActivity.this); myButtons[w].setOnClickListener(listener); } }

{{1}}

答案 1 :(得分:1)

你可以添加:

View.onClickListener onclick = new View.onClickListener() {
                  public void onClick(View v) {
                     ((MyButton)v).click();
                     //since v should be instance of MyButton
                  }
             };

到你的活动 然后使用:

myButtons[w].setOnClickListener(onclick); 
//one instance of onclick is enough, there is no need to create it for every button

在createButtons()

但是......为什么,为什么我们在Android中有ListView的按钮数组...