例:
   
@ViewInject(R.id.pull_to_refresh_listview)private PullToRefreshListView pullToRefreshListView;
不再使用一下代码初始化
   
pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pullToRefreshListView);
   
实现方式(网上有很多代码):
一个interface和一个class
interface:
   
import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by anykaa on 2015/6/3. */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ViewInject {    int value();}
class
import android.app.Activity;import java.lang.reflect.Field;/** * Created by anykaa on 2015/6/3. */@SuppressWarnings("unused")public class ViewInjectClass {    public static void autoInjectAllField(Activity activity) {        //得到Activity对应的Class        Class clazz = activity.getClass();        //得到该Activity的所有字段        Field[] fields = clazz.getDeclaredFields();        try {            for (Field field : fields) {                //判断字段是否标注InjectView                if (field.isAnnotationPresent(ViewInject.class)) {                    //如果标注了,就获得它的id                    ViewInject inject = field.getAnnotation(ViewInject.class);                    int id = inject.value();                    if (id > 0) {                        //反射访问私有成员,必须加上这句                        field.setAccessible(true);                        try {                            //然后对这个属性复制                            field.set(activity, activity.findViewById(id));                        } catch (Exception ex) {                        }                    }                }            }        } catch (Exception ex) {            ex.printStackTrace();        }    }}

使用方式及建议:
统一写一个BaseActivity
   
import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import com.anykaalibrary.ViewInjectClass;/** * Created by anykaa on 15/12/30. */public class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);    }    @Override    public void setContentView(int layoutResID) {        super.setContentView(layoutResID);        ViewInjectClass.autoInjectAllField(this);    }}
使用
   
public class MainActivity extends BaseActivity {        @ViewInject(R.id.pull_to_refresh_listview)    private PullToRefreshListView pullToRefreshListView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }}


 其实我并不建议这样使用,我倒是希望开发工具能够根据类似这种代码,在编译前自动将代码改成   
pullToRefreshListView = (PullToRefreshListView) findViewById(R.id.pullToRefreshListView);
这种形式。
   
特此梳理备用。

更多相关文章

  1. android反射方式访问内部类成员
  2. 如何实现Android重启应用程序代码 ?
  3. Linux创建应用快捷方式
  4. android常用的代码片段
  5. android 添加和删除快捷方式
  6. android 创建添加快捷方式
  7. Android Camera代码位置
  8. Android创建应用程序快捷方式(shortcut)
  9. Android Studio设置类代码模板

随机推荐

  1. Android开发常用命令整理
  2. Android(安卓)RecyclerView实现图片自适
  3. android studio编译jar包或者aar包
  4. fir.im Weekly - 如何在 iOS 上构建 Tens
  5. Google Protocol Buffer
  6. Android仿IOS提示框
  7. Android(安卓)Kotlin项目集成阿里ARouter
  8. Android(安卓)OOM Adjustments
  9. Android(安卓)自动化测试框架-百度cafe
  10. Android自学——ListView