Java 当以编程方式完成时,视图不会反映任何更改 基本视图层次结构如下所示: 第二项活动 线性布局(线性布局) constLayout(ConstraintLayout) 文本框(文本视图) 图像(图像视图) 图2 图3 ...

Java 当以编程方式完成时,视图不会反映任何更改 基本视图层次结构如下所示: 第二项活动 线性布局(线性布局) constLayout(ConstraintLayout) 文本框(文本视图) 图像(图像视图) 图2 图3 ...,java,android,android-studio,android-layout,programmatically-created,Java,Android,Android Studio,Android Layout,Programmatically Created,textbox TextView的可见性已消失,目标是使其在单击其他可见同级时可见,更改一些颜色和文本,再次单击时必须再次不可见并反转所有更改。 我无法理解我错过了什么。我已经检查了许多以前的项目,在这些项目中我做了同样的事情,但是我找不到任何明显的差异来解释为什么这些代码现在不能工作 secondActivity.java The basic view hierarchy is this: secondActivity linearLayout(LinearLayout)

textbox TextView的可见性已消失,目标是使其在单击其他可见同级时可见,更改一些颜色和文本,再次单击时必须再次不可见并反转所有更改。 我无法理解我错过了什么。我已经检查了许多以前的项目,在这些项目中我做了同样的事情,但是我找不到任何明显的差异来解释为什么这些代码现在不能工作

secondActivity.java

The basic view hierarchy is this: secondActivity linearLayout(LinearLayout) constLayout(ConstraintLayout) textbox(TextView) image(ImageView) image2 image3 ...
公共类secondActivity扩展活动{
公共布尔值isTextBoxHidden;
公共约束布局;
公共文本视图文本框;
@在创建时覆盖受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
constLayout=findviewbyd(R.id.constLayout);
textbox=findviewbyd(R.id.textbox);
isTextBoxHidden=false;
//设置侦听器
View.OnClickListener clickListener=新建视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(!isTextBoxHidden){
constLayout.setBackgroundColor(Color.BLACK);//在上一页设置颜色
v、 setBackgroundColor(Color.BLACK);//在可见视图上设置颜色
textbox.setText(“任意”);
textbox.setVisibility(View.VISIBLE);//已消失
isTextBoxHidden=true;
}
否则{
textbox.setVisibility(View.GONE);//再次隐藏
constLayout.setBackgroundColor(颜色:白色);
v、 setBackgroundColor(颜色:白色);
isTextBoxHidden=false;
}
}
};
//将侦听器插入所有子项
对于(int i=0;i

我看不出你在哪里设置
textbox
reference,所以这可能是个线索

编辑: 您是否编译了您提供的示例,并且一切正常,但我假设,
[…]再次永久消失
意味着您可能希望这是一个一次性操作,而不是
boolean
,只需使用
boolean
并将其与null进行比较

编辑:
第二个想法是,你可以删除else branch中的
isTextBoxHidden=false;

我同意我错过了一个参考,但非常明显,没有它,代码就无法编译,所以这不是答案。所以请不要在答案区域加上“maybe”关于打字错误的评论。更新了我的回答,以便再次更正我的错误。我肯定不是说这是一次一次性的操作,而是这里的另一次打字狂潮。你可以看到,每次点击,听者都在
isTextBoxHidden
true
之间交替使用
false
的值。我已经更正了我的意图在posthey中,该标志是循环正确切换所必需的。如果标志ISTEXTBOXHINDED=false被删除,那么在以后的所有单击中,将永远不会调用if()分支
public class secondActivity extends Activity {

    public boolean isTextBoxHidden;
    public ConstraintLayout constLayout;
    public TextView textbox;

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        constLayout = findViewById(R.id.constLayout);
        textbox = findViewById(R.id.textbox);
        isTextBoxHidden = false;

        // SETTING UP LISTENER
        View.OnClickListener clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!isTextBoxHidden) {
                    constLayout.setBackgroundColor(Color.BLACK);  //setting color on previously 
                    v.setBackgroundColor(Color.BLACK);            //setting color on visible view

                    textbox.setText("whatever");
                    textbox.setVisibility(View.VISIBLE);  //was gone
                    isTextBoxHidden = true;
                }
                else {
                    textbox.setVisibility(View.GONE);     //hide again
                    constLayout.setBackgroundColor(Color.WHITE);
                    v.setBackgroundColor(Color.WHITE);
                    isTextBoxHidden = false;
                }
            }
        };

        // INSERTING LISTENERS into all children
        for(int i=0; i<constLayout.getChildCount(); i++) {
                constLayout.getChildAt(i).setOnClickListener(clickListener);
        }
    }
}