如何使按钮单击功能被多次单击?

时间:2019-05-03 17:29:45

标签: java android

我正在创建一个包含主题和主题下的段落的应用程序。

当用户单击主题时,它会将段落设置为可见,并在重新单击时将其设置为消失。它只能被单击一次,如何使它发生10次?不用编写10次函数

我尝试添加recreate();在b1.setTextColor下,它仅重新创建该函数。对于主题b2,b3,b4等,我也具有相同的功能。单击所有主题并将可见性更改为VISIBLE时,用户按下b1即可将其关闭,它将所有其他主题的可见性设置为GONE。

        final LinearLayout lb1 = findViewById(R.id.b_title1a);
        final TextView b1 = findViewById(R.id.b_title1);
        b1.setTextColor(getResources().getColor(R.color.colorPrimary));
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lb1.setVisibility(View.VISIBLE);
                b1.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
                b1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        lb1.setVisibility(View.GONE);
                        b1.setTextColor(getResources().getColor(R.color.colorPrimary));

                    }
                });
            }
        });

有没有一种方法可以重复该功能或如何对其进行循环? 意思是用户会保持活动状态,并且能够多次打开和关闭主题。

     b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                lb1.setVisibility(View.VISIBLE);
                b1.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
                b1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        lb1.setVisibility(View.GONE);
                        b1.setTextColor(getResources().getColor(R.color.colorPrimary));
                        recreate();

                    }
                });
            }
        });

这行得通,但是代码不干净,会带来问题

2 个答案:

答案 0 :(得分:2)

正在发生的事情是:第一次单击该主题时,将显示该段落,但是随后您覆盖了该方法,以便将其隐藏。但是当您这样做时,您将无法显示它。

第一次单击后,您无需覆盖OnClick方法。使用if语句查看视图是否可见。如果是这样,请将其隐藏。如果没有,请显示出来。

final LinearLayout lb1 = findViewById(R.id.b_title1a);
final TextView b1 = findViewById(R.id.b_title1);
b1.setTextColor(getResources().getColor(R.color.colorPrimary));
b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (lb1.getVisibility() == View.VISIBLE) {
            lb1.setVisibility(View.GONE);
            b1.setTextColor(getResources().getColor(R.color.colorPrimary));
        } else {
            lb1.setVisibility(View.VISIBLE);
            b1.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
        }
    }
});

答案 1 :(得分:1)

全局设置布尔标志

Flag = true;

然后单击按钮,如果标志为true,则意味着单击按钮以显示该段落,因此编写代码以显示该段落并将Flag更改为false

下次,单击按钮时,标志将为false,然后您可以执行代码以隐藏段落。

b1.setOnClickListener(new View.OnClickListener(){
    public void onClick (View v){
        if (Flag) {
            lb1.setVisibility(View.VISIBLE);
            b1.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
        } else {
            lb1.setVisibility(View.GONE);
            b1.setTextColor(getResources().getColor(R.color.colorPrimary));
        }

    }
}