【问题标题】:Correct way to hide and show widgets?隐藏和显示小部件的正确方法?
【发布时间】:2018-07-25 15:16:54
【问题描述】:

在我的应用程序中,我需要在特定时间显示和隐藏 buttontextview 等小部件。 以及我的工作方式如下:

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

} 

我认为这不是正确的方法。 因为我不知道会有多少小部件。 非常感谢任何有关如何正确显示小部件的指导。

【问题讨论】:

  • 更具体一点,你想达到什么目的?
  • 我的布局有这些小部件,但在创建活动时它们应该不可见,所以我调用 hideview 例如按钮单击我需要显示它们,我写的代码不是足够的工作应该有认证的方式来做同样的事情,我不知道'
  • @wiils 您已经在使用简单且最佳的方法。你可以用它
  • 是的,我明白了,但可能不是问题

标签: android android-studio widget


【解决方案1】:

由于您不知道将附加多少测试视图,那么我认为最好的方法是:

  • 获取父视图组的引用(包含所有 文本视图),
  • 使用getChildAt 遍历所有孩子,
  • 验证对象是否是 TextView/ImageView 的实例,如果是,请根据您的逻辑设置其可见性

【讨论】:

  • 我正在寻找代码示例,它们会很有帮助。
【解决方案2】:

不是单独隐藏每个小部件,而是隐藏根布局。

RelativeLayout rootLayout;

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

并使用类似的东西来控制可见性。

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

【讨论】:

  • Hii @WahabKhanJadon 但我喜欢设置一些小部件的可见性,例如 EditText,同时隐藏同一布局上的其他小部件。
【解决方案3】:

获取对根布局的引用,遍历孩子,检查某个索引处的视图是否是EditText的实例(或不需要隐藏的视图),如果不隐藏它

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】:

    制作一个包含所有要显示/隐藏的视图的数组:

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

    然后用它来隐藏它们:

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

    并用它来展示他们:

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

    虽然您可以将 2 个代码部分组合在一个过程中:

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

    并称之为:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2017-06-18
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      相关资源
      最近更新 更多