1

我想通过代码创建一个作为 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() ?

谢谢您的帮助。

4

2 回答 2

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);
     }
}
于 2012-11-26T13:14:28.160 回答
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的按钮数组...

于 2012-11-26T13:16:56.710 回答