ViewStub的使用樣本

來源:互聯網
上載者:User

mainActivity如下:

package c.c;import android.os.Bundle;import android.view.View;import android.view.ViewStub;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;import android.app.Activity;/** * Demo描述: 利用ViewStub顯示和隱藏布局 * ViewStub的引入: * 在開發的時候,有些布局是要根據條件而動態顯示,達到一個布局兩用的效果, * 運用View.VISIBLE和View.GONE去改變布局的可見度. * 這樣的做法顯然是沒什麼多大的問題,優點邏輯清晰,控制靈活,但缺點就是耗費資源 * 在setContentView()或者用inflate載入布局檔案時無論View是否 * 被設定為View.GONE和View.VISIBLE,都會建立對象,佔用一定程度上的記憶體,所以在考慮最佳化程式的時候, * 盡量避免資源浪費,降低程式的資源佔有量,提高響應速度,提升軟體的使用者體驗 *  * 推薦的做法是使用android.view.ViewStub. * ViewStub是一個輕量級的View,它一個看不見的,不佔布局位置,佔用資源非常小的控制項. * ViewStub是一個隱藏的,不佔用記憶體空間的視圖對象,它可以在運行時消極式載入布局資源檔當 ViewStub可見,或者調用 * inflate()函數時,才會載入這個布局資源檔 注意的問題: ViewStub只能用來Inflate一個布局檔案,而不是某個具體的View *  * 遇到的問題:  * 報錯 ViewStub must have a non-null ViewGroup viewParent  * 原因: * 官方文檔:viewstub不能反覆inflate,只能inflate一次 *  * 參考資料: * http://blog.csdn.net/hitlion2008/article/details/6737537 */public class MainActivity extends Activity {    private Button mButton_show;    private Button mButton_hidden;    private ViewStub mViewStub;    private View mView=null;    private boolean isInflate=true;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        init();    }    private void init(){    mButton_show=(Button) findViewById(R.id.button_show);    mButton_show.setOnClickListener(new ButttonClickListenerImpl());    mButton_hidden=(Button) findViewById(R.id.button_hidden);    mButton_hidden.setOnClickListener(new ButttonClickListenerImpl());    mViewStub=(ViewStub) findViewById(R.id.viewStub);    }private class ButttonClickListenerImpl implements OnClickListener {public void onClick(View v) {switch (v.getId()) {case R.id.button_show:if (isInflate) {mView=mViewStub.inflate();isInflate=false;}else {mView.setVisibility(View.VISIBLE);}                TextView textView=                (TextView) mView.findViewById(R.id.viewStub_TextView);                textView.setText("time="+System.currentTimeMillis());break;case R.id.button_hidden:                mViewStub.setVisibility(View.GONE);break;default:break;}}}}

main.xml如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"     android:orientation="vertical"    >   <LinearLayout    android:layout_width="wrap_content"    android:layout_height="wrap_content"      >     <ViewStub          android:id="@+id/viewStub"         android:layout_width="wrap_content"         android:layout_height="wrap_content"          android:layout="@layout/testviewstublayout"      />   </LinearLayout>   <Button        android:id="@+id/button_show"       android:layout_width="wrap_content"       android:layout_height="wrap_content"        android:text="載入ViewStub"    />   <Button        android:id="@+id/button_hidden"       android:layout_width="wrap_content"       android:layout_height="wrap_content"        android:text="隱藏ViewStub"    /></LinearLayout>

testviewstublayout.xml.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"    android:orientation="vertical" >    <TextView         android:id="@+id/viewStub_TextView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="test test test"      /></LinearLayout>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.