android roboguice2,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):发送接收 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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:id="@+id/hello"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

android:layout_width="fill_parent"

android:layout_height="0dp"

android:layout_weight="1.0"

/>

android:id="@+id/txtTime"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

定义该 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,需要执行 setContentView。

在 RoboGuice2.0 中你可以使用同样的方法,2.0还提供了一个简单的标注方法 @ContentView ,如本例,为 Activity 设置 ContentView。

26.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值