在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Android/ Inject 自定義 View
Just-in-time Bindings
Binding Annotations
Standard Injection
第一個例子 Hello World
Bindings 概述
Linked Bindings
如何綁定 generic 類型
@Provides Methods
RoboGuice 功能描述
概述
綜合示例 Astroboy
Inject Resources
Instance Bindings
Inject 自定義 View
Scopes
Provider Bindings
Untargetted Bindings
Inject Extra
第一個例子 Hello World
Inject Context
發(fā)送接收 Events
Inject View

Inject 自定義 View

前面介紹了 Android RoboGuice2 的 HelloWorld 示例,并介紹了從 RoboGuice 1.1 升級到 RoboGuice2.0 的主要 注意事項。其它的基本概念和 RoboGuice1.1 基本一樣,可以參見

  • Android RoboGuice 使用指南(3):Bindings 概述
  • Android RoboGuice 使用指南(4):Linked Bindings
  • Android RoboGuice 使用指南(5):Binding Annotations
  • Android RoboGuice 使用指南(6):Instance Bindings
  • Android RoboGuice 使用指南(7):@Provides Methods
  • Android RoboGuice 使用指南(8):Provider Bindings
  • Android RoboGuice 使用指南(9):Untargetted Bindings
  • Android RoboGuice 使用指南(10):Just-in-time Bindings
  • Android RoboGuice 使用指南(11):Scopes
  • Android RoboGuice 使用指南(12):如何綁定 generic 類型
  • Android RoboGuice 使用指南(13):RoboGuice 功能描述
  • Android RoboGuice 使用指南(14):Inject View
  • Android RoboGuice 使用指南(15):Inject Context
  • Android RoboGuice 使用指南(16):Standard Injection
  • Android RoboGuice 使用指南(17):Inject Extra
  • Android RoboGuice 使用指南(18):Inject Resources
  • Android RoboGuice 使用指南(19):發(fā)送接收 Events

本例介紹如何 Inject 自定義的 View,Inject 自定義的 View 和 Android 自帶的 View(如 TextView,Button)方法一樣。

本例使用一個自定義的 TextView,每隔1秒顯示當前時間。前定義如下:

//--------------------------------- PACKAGE ------------------------------------
package com.pstreets.guice.customview;

//--------------------------------- IMPORTS ------------------------------------
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.TextView;

import java.util.Calendar;
import java.util.Date;

public final class TimeTextView extends TextView {

    public TimeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        postDelayed(mUpdateView, mRepeatTimePeriod);

    }

    private void setTimeString() {
        Calendar c = Calendar.getInstance();
        Date currentTime = c.getTime();
        String timeString = formatTime(currentTime);
        setText(timeString);
    }

    private Handler mHandler = new Handler();
    /**
     * one second.
     */
    private int mRepeatTimePeriod = 1000;

    private Runnable mUpdateView = new Runnable() {

        @Override
        public void run() {
            TimeTextView.this.setTimeString();
            // Force toggle again in a second
            mHandler.postDelayed(this, mRepeatTimePeriod);
        }

    };

    private String formatTime(Date time) {
        int hours = time.getHours();
        int miniutes = time.getMinutes();
        int seconds = time.getSeconds();
        String ret = "";
        if (hours < 10) {
            ret += "0";
        }
        ret += hours + ":";
        if (miniutes < 10) {
            ret += "0";
        }
        ret += miniutes + ":";
        if (seconds < 10) {
            ret += "0";
        }
        ret += seconds;

        return ret;
    }

}

修改 main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:id="@+id/hello"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<TextView

    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.0"

    />
<com.pstreets.guice.customview.TimeTextView
    android:id="@+id/txtTime"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

    />
</LinearLayout>

定義該 TimeTextView 的 id 為 txtTime。

這樣可以在對應的 Activity 中使用 InjectView 來給對應的 txtTime 自動賦值(注入)。

@ContentView(R.layout.main)
public class GuiceDemo extends RoboActivity  {

    @InjectView (R.id.txtTime) TimeTextView txtTime;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        txtTime.setTextColor(0xFFFF0000);

    }

}

由于 GuiceDemo 是從 RoboActivity 派生的,在 onCreate 第一行的 super.onCreate() 完成注入功能。如果你對 RoboGuice1.1 熟悉的話,在使用注入的變量前如 txtTime,需要執(zhí)行 setContentView。 在 RoboGuice2.0 中你可以使用同樣的方法,2.0還提供了一個簡單的標注方法 @ContentView ,如本例,為 Activity 設置 ContentView。

http://wiki.jikexueyuan.com/project/android-roboguice/images/26.png" alt="" />

本例下載 。

從本例可以看出,和 RoboGuice1.1 相比,RoboGuice2.0 在使用上要簡潔的多。本例只需從 RoboActivity 派生,不在需要定義 Application 等。

上一篇:Inject Extra下一篇:@Provides Methods