为了账号安全,请及时绑定邮箱和手机立即绑定

ViewStub从头到位就只能加载一次是吗?设置了隐藏之后再重新加载程序还是会崩溃是不是因为这个原因?在实际开发中应该如何避免或者是解决这个问题呢?

public void onClick(View v){

    if(flag){

    stub.inflate();

    flag = false;

    }else{

    stub.setVisibility(View.GONE);

    flag = true;

    }

}

正在回答

2 回答

ViewStub只能加载一次,当把这个外部布局文件inflate后,它就已经存在于内存中了,可以定义一个属性去标识它,如果没加载时就inflate,加载完成后就setVisibility来控制显示或隐藏。比如show_button最开始其显示内容是“显示”。部分代码如下:

private Button show_button;
private ViewStub viewStub;
private View view = null;

@Override
public void onClick(View v) {
    if (view == null) {
        view = viewStub.inflate();
        show_button.setText("隐藏");
    } else {
        if ("显示".equals(show_button.getText())) {
            view.setVisibility(View.VISIBLE);
            show_button.setText("隐藏");
        } else if ("隐藏".equals(show_button.getText())) {
            view.setVisibility(View.INVISIBLE);
            show_button.setText("显示");
        }
    }

}


1 回复 有任何疑惑可以回复我~
#1

零即是圆 提问者

非常感谢!
2015-12-19 回复 有任何疑惑可以回复我~
#2

元素滴3579866

请问一下,这个view只要加载一次就不会是null了吗,还是说我把view = viewStub.inflate();if外也行是吧
2016-08-19 回复 有任何疑惑可以回复我~
if ("显示".equals(bt.getText())) {
			            viewstub.setVisibility(View.VISIBLE);
			            bt.setText("隐藏");
			        } else if ("隐藏".equals(bt.getText())) {
			            viewstub.setVisibility(View.INVISIBLE);
			            bt.setText("显示");
			      }

这样也行,就是没用到inflate()

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第二门课(第1季)
  • 参与学习       111172    人
  • 解答问题       1457    个

本课程由浅入深地带您学会Android的常用控件的开发和使用

进入课程

ViewStub从头到位就只能加载一次是吗?设置了隐藏之后再重新加载程序还是会崩溃是不是因为这个原因?在实际开发中应该如何避免或者是解决这个问题呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信