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