我正在创建一个包含主题和主题下的段落的应用程序。
当用户单击主题时,它会将段落设置为可见,并在重新单击时将其设置为消失。它只能被单击一次,如何使它发生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();
}
});
}
});
这行得通,但是代码不干净,会带来问题
答案 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));
}
}
}