首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

Android RoboGuice2 使用指南(三): Inject 自定义View

2012-08-01 
Android RoboGuice2 使用指南(3): Inject 自定义View前面介绍了Android RoboGuice2 的HelloWorld示例,并介

Android RoboGuice2 使用指南(3): Inject 自定义View

前面介绍了Android RoboGuice2 的HelloWorld示例,并介绍了从RoboGuice 1.1 升级到RoboGuice2.0 的主要注意事项。其它的基本概念和RoboGuice1.1基本一样,可以参见

Android RoboGuice 使用指南(3):Bindings 概述Android RoboGuice 使用指南(4):Linked BindingsAndroid RoboGuice 使用指南(5):Binding AnnotationsAndroid RoboGuice 使用指南(6):Instance BindingsAndroid RoboGuice 使用指南(7):@Provides MethodsAndroid RoboGuice 使用指南(8):Provider BindingsAndroid RoboGuice 使用指南(9):Untargetted BindingsAndroid RoboGuice 使用指南(10):Just-in-time BindingsAndroid RoboGuice 使用指南(11):ScopesAndroid RoboGuice 使用指南(12):如何绑定generic类型Android RoboGuice 使用指南(13):RoboGuice 功能描述Android RoboGuice 使用指南(14):Inject ViewAndroid RoboGuice 使用指南(15):Inject ContextAndroid RoboGuice 使用指南(16):Standard InjectionAndroid RoboGuice 使用指南(17):Inject ExtraAndroid RoboGuice 使用指南(18):Inject ResourcesAndroid 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

<?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,需要执行setContentView。
在RoboGuice2.0中你可以使用同样的方法,2.0还提供了一个简单的标注方法@ContentView ,如本例,为Activity设置ContentView。

Android RoboGuice2 使用指南(三): Inject 自定义View

本例下载 。

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


 

 

热点排行