保持android按钮选中状态

时间:2012-02-16 20:08:29

标签: android button

我知道这是一个以前被问过多次的问题,但我似乎无法在我的代码中解决它。我有两个按钮,当按下一个按钮时,我希望将其保持在选定状态,反之亦然。我尝试过使用setSelected和setPressed,但我似乎无法让它工作。这是我正在使用的代码:

    region_button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            objects = category;
            adap.notifyDataSetChanged();
            proximity_button.setPressed(false);
            region_button.setPressed(true);

        }
    });

    proximity_button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            objects = proximity;
            adap.notifyDataSetChanged();
            region_button.setPressed(false);
            proximity_button.setPressed(true);

        }
    });

修改: 根据评论,我需要补充一点,我有按钮的自定义xml背景,并希望保留当前的外观。

5 个答案:

答案 0 :(得分:16)

我在Google上搜索并找到了这个Stack Overflow帖子:
How can i keep one button as pressed after click on it?

mycodes_Button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        mycodes_Button.setPressed(true);
        return true;
    }
});

但阅读评论,这很有意思!

答案 1 :(得分:3)

你为什么使用按钮? CheckBoxRadioGroup是这些案例的最佳解决方案

checkBox.setChecked(false);

答案 2 :(得分:1)

这是一个想法,禁用按下按钮并启用其他按钮。禁用按钮布局类似于按下的布局。用户会将其视为已按下,但实际上已禁用。

答案 3 :(得分:1)

我知道我参加晚会很晚,但是我尝试执行以上操作,但它仍然像是临时状态(除非您想保持对此状态的操作)。

对我有用的是在{strong> XML 文件中包含state_selected="true",在Java文件中包含imageButton.setSelected(true)。见下文。

ibType1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
    ibType1.setSelected(true);
    ibType2.setSelected(false);
}//onClick
});

XML:

<item android:state_selected="true">
<shape android:shape="rectangle">
    <corners android:radius="45dp" />
    <solid android:color="@color/colorAccent" />
    <stroke android:width="1dp" android:color="#000000"/>
</shape>

这将允许您以编程方式向上选择具有特定背景状态的图像按钮或按钮,直到您决定选择其他图像按钮或按钮为止。

答案 4 :(得分:0)

复选框可以正常工作,但是如果你在iOS上靠近UISegmentedControl的UI之后,这可能包含了LinearLayout中所需的所有按钮,那么你可以沿着以下几行:

public void onClick( View v ){
    if ( v.getID == R.id.btn1 ) {
        btn1.setEnabled(false);
        btn2.setEnabled(true);
        // do stuff
    }
    else if ( v.getId() == R.id.btn2 ) {
        btn2.setEnabled(false);
        btn1.setEnabled(true);
        // do stuff
    }
}

当然,在您的drawable文件夹中,您可以为每个州添加背景颜色,边框和其他可视内容。