viewStub 延迟布局加载
  HvTJUzsxOBtS 2023年11月25日 16 0



文章目录

  • 1、简介
  • 2、结构布局
  • 3、功能文件


1、简介

打开 activity 的时候,减少一些布局的加载。加快activity 显示的速度

viewStub  延迟布局加载_xml

2、结构布局

viewStub  延迟布局加载_android_02

3、功能文件
  1. test_view_stub.xml
    延迟显示的 布局文件
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/text_id"
    android:text="Hello Test ViewStub"
    android:textSize="30dp"
    android:textColor="@color/colorAccent">

</TextView>
</LinearLayout>

2) activity_main.xml 文件
主界面 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.lum.myapplication.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="40dp"
        android:onClick="onClick"/>
    <ViewStub
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/viewStub"
        android:layout="@layout/test_view_stub"
        android:inflatedId="@+id/replace_view_stub"/>

</LinearLayout>

3) MainActivity.java

功能文件

package com.example.lum.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewStub;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private ViewStub viewStub;
    View viewStubGetView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        viewStub = (ViewStub) findViewById(R.id.viewStub);
    }

    /*
     ①   inflate操作只能进行一次,因为inflate的时候是将其指向的布局文件解析inflate 并替换掉当前ViewStub本身
    (由此体现出了ViewStub“占位符”性质),一旦替换后,此时原来的布局文件中就没有ViewStub控件了
     ②句不需要,如果用到setvisibility的话,那么①②两句顺序不可颠倒,否则报错
    java.lang.IllegalStateException:ViewStub must have a non-null ViewGroup viewParent,
    因为viewstub不能反复inflate,只能inflate一次,setVisibility会间接调用inflate
     ③ viewStub 已经被替换 原来id找不到了
      * */
    public void onClick(View view) {
        if (viewStubGetView == null)
             viewStubGetView = viewStub.inflate();// ①
        //viewStub.setVisibility(View.VISIBLE);// ②
        TextView textView = (TextView) viewStubGetView.findViewById(R.id.text_id);
        textView.setText("testView  show");
        textView.setVisibility(View.VISIBLE);
        View viewStub = (ViewStub) findViewById(R.id.viewStub);//③
        if (viewStub == null)
            Log.i("TAG","viewStub 已经被替换");

    }
}

文件参考:
merge、include、ViewStub的作用及分析
https://blog.51cto.com/weijiancheng/2085997


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月25日 0

暂无评论

推荐阅读
  0piCg03t9xej   2023年12月23日   78   0   0 mavenxmlJavaJavamavenxml
HvTJUzsxOBtS