Correct way to hide and show widgets?

强颜欢笑 提交于 2019-12-26 03:49:22

问题


In my app, I need to show and hide widgets like button and textview at a certain time. and how I am doing is as the following:

private void hideviews() {
    image.setVisibility(View.GONE); ///ImageView
    title1.setVisibility(View.GONE);///TextView
    title2.setVisibility(View.GONE);///TextView
    title3.setVisibility(View.GONE);///TextView
    title4.setVisibility(View.GONE);///TextView
    title5.setVisibility(View.GONE);///TextView
}

private void showviews() {
    image.setVisibility(View.VISIBLE);
    title1.setVisibility(View.VISIBLE);///TextView
    title2.setVisibility(View.VISIBLE);///TextView
    title3.setVisibility(View.VISIBLE);///TextView
    title4.setVisibility(View.VISIBLE);///TextView
    title5.setVisibility(View.VISIBLE);///TextView

} 

I don't think this is the correct way to do this. Because I don't know how many widgets there will be. Any guidance on how to correctly show widgets is really appreciated.


回答1:


Since you don't know how many testviews will be attached, then I believe that the best approach will be to:

  • get the reference of the parent view group (that contains all the textviews),
  • loop through all the childs using getChildAt,
  • verify whether the object is an instance of TextView/ImageView and if so set its visibility according to your logic



回答2:


Instead of hiding every widget separately hide the root layout.

RelativeLayout rootLayout;

rootLayout= (RelativeLayout) findViewById(R.id.root_layout);

and use something like this to control the visibility.

public void setLayoutInvisible() {
    if (rootLayout.getVisibility() == View.VISIBLE) {
        rootLayout.setVisibility(View.GONE);
    }
}
public void setLayoutVisible() {
    if (rootLayout.getVisibility() == View.GONE) {
        rootLayout.setVisibility(View.VISIBLE);
    }
}



回答3:


Get the reference to root layout, iterate through the childs, check if the view at certain index is instance of EditText(or View that you dont need to hide), if not hide it

RelativeLayout root = findViewById(R.id.root)
for(i=0,i<root.getChildCount()-1,i++){
    if(! (root.getChildAt(i) instance of EditText)){
       root.getChildAt(i).setVisibility(View.GONE)
      }
  }



回答4:


Make an array of all the views that you want to show/hide:

View[] views = {image, title1, title2, title3, title4, title5};

and then use this to hide them:

for (View view : views) {
    view.setVisibility(View.GONE);
}

and use this to show them:

    for (View view : views) {
        view.setVisibility(View.VISIBLE);
    }

although you can combine the 2 code parts in a single procedure:

void fixViews(int state) {
        for (View view : views) {
            view.setVisibility(state);
        }
}

and call it:

fixViews(View.GONE); or fixViews(View.VISIBLE);



来源:https://stackoverflow.com/questions/51522437/correct-way-to-hide-and-show-widgets

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!