通过按钮更改按钮的onClick()方法

时间:2016-05-23 19:49:49

标签: java android

我有两种方法:

addCard();

removeCard();

我总共有 6个按钮

开头所有按钮都有onClick()方法,addCard()方法。 在我点击另一个按钮(第7个)后,所有其他6个应该将onClick()方法从addCard()更改为removeCard()

我如何这样做? 只是为了让你知道我的想法,我开始将这两种方法作为按钮的正常方法,所以他们将View v作为参数,任何方式真正地" swap"方法

addCard():

public void addCard(View v){
    switch (v.getId()){
        case R.id.first :
            demoniacList.add(new Demoniac());
            first.setEnabled(false);
        case R.id.second :
            guardList.add(new Guard());
            second.setEnabled(false);
        case R.id.third :
            masonsList.add(new Masons());
            masonsList.add(new Masons());
            third.setEnabled(false);
        case R.id.fourth :
            mediumList.add(new Medium());
            fourth.setEnabled(false);
        case R.id.fifth :
            if (demoniacList.size() + guardList.size() + masonsList.size() +
                    mediumList.size() + villagerList.size() + werehamsterList.size() < players.size()-1) {
                villagerList.add(new Villager());
            } else {
                villagerList.add(new Villager());
                fifth.setEnabled(false);
            }
        case R.id.sixth :
            werehamsterList.add(new Werehamster());
            sixth.setEnabled(false);
    }
}

3 个答案:

答案 0 :(得分:1)

我会这样做的 -

public class MyActivity extends Activity implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        ...
        mButton1.setOnClickListener(this);
        mButton2.setOnClickListener(this);
        ...
        mButton6.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case 1:
            case 2:
            ...
            case 6:
                if(/* Button 7 is present / clicked */) {
                    removeCard();
                } else {
                    addCard();
                }
        }
    }
}

答案 1 :(得分:1)

使用下面代码中给出的布尔变量。

public class MainActivity extends Activity implements View.OnClickListener {

private boolean isAdd=true;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ...
    mButton0.setOnClickListener(this);
    mButton1.setOnClickListener(this);
    ...
    mButton6.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch(v.getId()) {
        case 0:
            if(isAdd) {
                addCard();
            } else {
                removeCard();
            }
        case 1:
            if(isAdd) {
                addCard();
            } else {
                removeCard();
            }
        ...
        case 6:
            if(isAdd) {
                addCard();
                isCard=false;
            } else {
                removeCard();
                isCard=true; 
            }
    }
}

}

答案 2 :(得分:0)

您应该可以使用某种状态表示来执行此操作...也许在视图中?也许布尔showRemoveNotAddButton var?

然后只需在适当的处理方法中打开该var。

您的切换按钮单击处理程序应更改该布尔值,然后重新渲染。

渲染应该可以访问该布尔值,并且能够知道要渲染的按钮类型。