Android:如何在单击时将onClickListener设置为不同的按钮

时间:2015-03-12 10:21:40

标签: android button onclicklistener

我有十个按钮,其中只有一个按钮在任何时间点都有红色背景,红色按钮有一个onClicklistener。 当点击这个红色按钮时,随机的这10个按钮中的一个将获得红色背景,这个新的红色按钮应该使用之前的onCLickListener,当再次点击这个新的红色按钮时,这10个按钮中的一个随机获得红色背景,onClickListener应该被分配给它并且每次点击RedButton时都有一个计数器。

实施例: 有四个按钮 [WhiteButton WhiteButton RedButton WhiteButton]并且只有RedButton有onClickListener 单击RedButton时,其中一个按钮颜色变为红色 [WhiteButton RedButton WhiteButton WhiteButton] 当点击这个新的RedButton时,按钮就变成了 [WhiteButton WhiteButton WhiteButton RedButton]

第一次单击RedButton时,我可以将十个按钮之一的颜色更改为红色,但无法将OnClickListener设置为新的RedButton。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ourButton = (Button) findViewById(R.id.button);
    ourTextView = (TextView) findViewById(R.id.textView);

    buttons[0] = (Button) findViewById(R.id.button2);
    buttons[1] = (Button) findViewById(R.id.button3);
    buttons[2] = (Button) findViewById(R.id.button4);
    buttons[3] = (Button) findViewById(R.id.button5);

    Random r = new Random();
    oddValue = r.nextInt(4 - 0);
    buttons[oddValue].setBackgroundColor(Color.RED);

    buttons[oddValue].setOnClickListener(new ourOnClickListener(this));

ourOnClickListener

public class ourOnClickListener implements OnClickListener{
    MainActivity caller;
    private int count;


    public ourOnClickListener(MainActivity activity) {
        this.caller = activity;
        this.count = 0;

    }

    public void onClick(View view) {
        int i;
        count = count + 1;
        Random r = new Random();

        int oddValue_new = r.nextInt(4 - 0);

        caller.buttons[oddValue_new].setBackgroundColor(Color.RED);
        caller.ourTextView.setText("Count : " + count);

    }

}

3 个答案:

答案 0 :(得分:0)

您可以像设置背景颜色一样进行:

caller.buttons[oddValue_new].setOnClickListener(this);

由于您是onClickListener,因此可以将其称为新的onClickListener。

答案 1 :(得分:0)

  • 如果您只想要红色按钮可以点击。您可以为所有人设置Enabled为false(排除红色按钮)。因此,您将setOnClickListener设置为所有按钮。

  • 如果可以单击所有按钮,则仅在单击红色时运行操作。您应该检查点击的按钮并比较它是否为事件中的红色按钮单击

  • 从所有按钮'setOnClickListener(null)'中删除OnClickListener,并将SetOnClickListener删除为红色

答案 2 :(得分:0)

我会以不同的方式解决这个问题。

  1. 将引用保存为红色背景redButton

  2. 所有按钮都具有相同的onClick。在onClick中,只需确认点击的按钮是具有红色背景的按钮(仅通过引用检查)。如果不是 - 什么都不做。如果是:选择新按钮,更改背景并保存对新按钮的引用。

  3. 您的onClick方法应如下所示:

    public void onClick(View view) {
        if (view == redButton) {
            redButton.setBackgroundColor(Color.WHITE);
            Random r = new Random();
            int oddValue_new = r.nextInt(4 - 0);
            redButton = buttons[oddValue_new];
            redButton.setBackgroundColor(Color.RED);
        } 
    }
    

    <强>更新

    正如@Mr Phuc 87建议你可以使用enabled。我认为这是非常好的方法。除enabled之外,您还可以使用state-list。创建状态列表,其中android:state_enabled=false为白色背景,android:state_enabled=true为红色背景。现在您只需更改按钮的enabled属性即可。

    OnClick应如下所示:

    public void onClick(View view) {
        redButton.setEnabled(false);
        Random r = new Random();
        int oddValue_new = r.nextInt(4 - 0);
        redButton = buttons[oddValue_new];
        redButton.setEnabled(true);
    
    }
    

    state-list应如下(将其放在drawable中):

    <selector xmlns:android="http://schemas.android.com/apk/res/android"
        <item android:state_selected="false" android:drawable=@color/white />
        <item android:state_selected="true" android:drawable=red_here />
    </selector>