单击按钮时更改对话框内的按钮属性

问题描述 投票:0回答:1

我有一个单击按钮后打开的对话框。对话框内部包含多个按钮,但为了简单起见,我只关注“太阳”按钮。该按钮的理想结果是,如果按下该按钮,“Sun”的文本颜色将变成绿色,然后如果再次按下该按钮,它将变回正常的白色文本颜色。 此图是对话框

下面列出了上下文的源代码。

按钮属性 XML

<Button
                    android:id="@+id/sunday_btn"
                    android:layout_width="90sp"
                    android:layout_height="90sp"
                    android:layout_gravity="top|left"
                    android:background="@drawable/roundstyle_darkgray"

                    android:fontFamily="@font/inria_sans_bold"
                    android:text="Sun"
                    android:textAllCaps="false"
                    android:textColor="@color/white"
                    android:textSize="30sp"
                    android:onClick="sundayToggle"/>

颜色.xml

\<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="lightGray">#D9D9D9</color>
    <color name="darkGray">#404040</color>
    <color name="darkerGray">#141414</color>
    <color name="selectedGreen">#57E44B</color>
</resources>

RateList.java

public class RateList extends AppCompatActivity {
    private boolean bool_editMode = false;
    private final boolean[] popup_selectedWdBool = {false,false,false,false,false,false,false};

    Dialog dialog;
    Button btnDialogSave, btnDialogCancel, sundayBTN;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_rate_list);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        ((Button)findViewById(R.id.add_constant_btn)).setVisibility(View.INVISIBLE);

        dialog = new Dialog(RateList.this);
        dialog.setContentView(R.layout.add_constant_popup);
        dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
        dialog.setCancelable(false);

        btnDialogCancel = (Button)findViewById(R.id.cancel_button);
        btnDialogSave = (Button)findViewById(R.id.save_button);
        sundayBTN = (Button)findViewById(R.id.sunday_btn);
    }

    public void onClickSave(View view) {
        dialog.dismiss();
        Toast.makeText(RateList.this, "Saved", Toast.LENGTH_SHORT).show();
        // SAVE INFO TO CSV
    }

    public void onClickCancel(View view) {
        dialog.dismiss();
        Toast.makeText(RateList.this, "Cancelled", Toast.LENGTH_SHORT).show();
    }

    public void sundayToggle(View view) {
        if (!popup_selectedWdBool[0]){
            Toast.makeText(RateList.this, "Sunday Selected", Toast.LENGTH_SHORT).show();
            sundayBTN.setTextColor(Color.parseColor("#57E44B"));
        }else{
            Toast.makeText(RateList.this, "Sunday Deselected", Toast.LENGTH_SHORT).show();
            sundayBTN.setTextColor(Color.parseColor("#FFFFFF"));
        }
        popup_selectedWdBool[0] = !popup_selectedWdBool[0];
    }
}

根据提供的代码,这就是我的问题所在。在

sundayToggle()
下,有一个 if-else 语句,用于处理按钮的选定部分和未选定部分。除了这些行之外,所有这些都有效:
sundayBTN.setTextColor(Color.parseColor("#57E44B"));
sundayBTN.setTextColor(Color.parseColor("#FFFFFF"));
。我通过注释掉这两行来测试它们,这使得程序可以工作并且
Toast
也可以工作。但如果我取消注释它们,当我按下它时,不仅仅是对话框,整个活动都会崩溃。我现在想知道我做错了什么,因为到这一部分一切都很顺利。我的保存和取消适用于其他上下文。

我直接使用了

(Button)findViewById(R.id.sunday_btn);
,然后将其变成名为
sundayBTN
的变量。两个都没用。

android-studio android-button android-dialog
1个回答
0
投票

没关系,我找到了答案 显然,您必须指定您尝试更改的按钮来自对话框,而不是来自布局本身。

因此:

sundayBTN = (Button)findViewById(R.id.sunday_btn);

我把它变成了这样:

sundayBTN = (Button)dialog.findViewById(R.id.sunday_btn);

这使得整个事情顺利进行!

© www.soinside.com 2019 - 2024. All rights reserved.