我想通过代码创建一个对象数组,这些对象是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()?
感谢您的帮助。
答案 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的按钮数组...