androidannotation study(1)---Activity, Fragment,Custom Class & Custom View
androidannotation 是github上的一个开源项目。
主要是注解机制,可以改善android写代码的效率。
Activity 使用
1.@EActivity 注解
可想而知,service,broadcastreceiver等都有相应的注解。
package com.joyfulmath.myannnotationsample.activity; import android.app.Activity;
import com.joyfulmath.myannnotationsample.R;
import com.joyfulmath.myannnotationsample.fragment.EFragmentSampleFragment;
import com.joyfulmath.myannnotationsample.utils.TraceLog; import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.FragmentById;
import org.androidannotations.annotations.Receiver; @EActivity(R.layout.activity_eactivity_sample)
public class EActivitySampleActivity extends Activity { @FragmentById(R.id.myFragemnt)
EFragmentSampleFragment eFragmentSampleFragment; @Receiver(actions = EFragmentSampleFragment.ACTION)
void myReceiver()
{
TraceLog.i("receive:"+EFragmentSampleFragment.ACTION);
}
}
一个典型的Activity如上注解。R.layout.activity_eactivity_sample
这个layout表示,该activity讲加载这个layout,等同于在oncreate中setcontent一样。
@FragmentById 是fragment的注解,后面会讲到。
@Receiver使用的是 监听广播。比起老的写法,大大简化。
2.@EFragment
package com.joyfulmath.myannnotationsample.fragment; import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.TextView; import com.joyfulmath.myannnotationsample.R;
import com.joyfulmath.myannnotationsample.utils.TraceLog;
import com.joyfulmath.myannnotationsample.view.EViewSampleView; import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.RootContext;
import org.androidannotations.annotations.ViewById; /**
* Created by deman on 2015/11/5.
*/
@EFragment(R.layout.fragment_efragment_sample)
public class EFragmentSampleFragment extends BaseFragment { public final static String ACTION = "efagment.samplefragment.action"; @ViewById(R.id.textFragmentView)
TextView textView; @ViewById(R.id.eViewSample)
EViewSampleView eViewSampleView; @Click(R.id.textFragmentView)
void sendBroadCast()
{
eViewSampleView.setVisibility(View.VISIBLE);
eViewSampleView.setSpannableText("custom define text");
doBackground();
} @Background
void doBackground()
{
TraceLog.i("sendBroadCast");
getActivity().sendBroadcast(new Intent(ACTION));
}
}
与activity类似,@EFragment 后面也是带一个layout,来表示这个fragment的布局。
里面的布局元素,使用也是非常简单:
@ViewById(R.id.textFragmentView)
TextView textView;
这句话的意思就是,在适当的时候把
textView = ((TextView) hasViews.findViewById(com.joyfulmath.myannnotationsample.R.id.textFragmentView));
在\app\build\generated\source\apt\debug\com\joyfulmath\myannnotationsample\fragment
下面会生成类+“_”.
这个类才是实际真正运行的类。
当然要运用fragment,和老的写法是一致的:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.joyfulmath.myannnotationsample.activity.EActivitySampleActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myFragemnt"
class="com.joyfulmath.myannnotationsample.fragment.EFragmentSampleFragment_"
/>
</RelativeLayout>
3.Custom Class
这个写法更加简单:@EBean
用这个修饰词,表示class的构造只有默认,以及带context参数的2种结构。
在其他地方使用这个calss的时候,使用@Bean注解。
@EBean
public class NotificationMgr { @SystemService
NotificationManager notificationManager; @RootContext
Context context;
看到@RootContext 是构造函数用的context。
看使用的地方,debug里面可以看到:
notificationMgr = NotificationMgr_.getInstance_(this);//this 就是当前activity
4.custom view
自定义view的关键是2点:
@EView关键字
构造函数如下:
@EView
public class EViewSampleView extends TextView { public EViewSampleView(Context context,AttributeSet attributes)
{
super(context,attributes);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
} public void setSpannableText(CharSequence text)
{
TraceLog.i(text.toString());
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new ForegroundColorSpan(Color.GREEN),1,spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
setText(spannableString);
}
}
其他就和自定义view一样了。
参考:
https://github.com/excilys/androidannotations/wiki/Cookbook
androidannotation study(1)---Activity, Fragment,Custom Class & Custom View的更多相关文章
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
- Android开发教程 - 使用Data Binding(四)在Fragment中的使用
本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...
- 【转】 Pro Android学习笔记(三八):Fragment(3):基础小例子-续
目录(?)[-] Step 2实现Fragment指定调用类TitleFragment onInflate和onAttach onCreate和onCreateView onActivityCreat ...
- Android之Activity系列总结(一)--Activity概览
Activity 本文内容 创建 Activity 实现用户界面 在清单文件中声明 Activity 启动 Activity 启动 Activity 以获得结果 结束 Activity 管理 Acti ...
- Android基础总结(六)Activity
创建第二个Activity(掌握) 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-filter> <ac ...
- android源码解析(十七)-->Activity布局加载流程
版权声明:本文为博主原创文章,未经博主允许不得转载. 好吧,终于要开始讲讲Activity的布局加载流程了,大家都知道在Android体系中Activity扮演了一个界面展示的角色,这也是它与andr ...
- ViewPager 详解(五)-----使用Fragment实现ViewPager滑动
前言:前几篇文章讲解了ViewPager的普通实现方法,但Android官方最推荐的一种实现方法却是使用fragment,下面我们使用fragment来重新实现一下第一篇<ViewPager 详 ...
- 02Android用户界面优化之(一)Android Fragment
一.使用Fragment 1.AndroidManifest.xml文件 <?xml version="1.0" encoding="utf-8"?> ...
- Android四大组件全然解析(一)---Activity
本文參考\android\android\frameworks\base\core\java\android\app\Activity.java文件里的类凝视.以及android/frameworks ...
随机推荐
- Linux的一些命令
程序 # rpm -qa # 查看所有安装的软件包 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 / ...
- 1、图解Oracle Logminer配置使用
LogMiner配置使用手册 1 Logminer简介 1.1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻 ...
- C# 只启动一个实例完全解决方案
工作上经常会遇到"程序只能启动一个实例"这样的需求. 我想,这样的需求应该很普遍,所以没打算去动脑筋,去找谷歌问下就得了,用下来发现,不是这里不爽就是那里不行. 先说下我详细的几点 ...
- jquery easyui dialog Bug解决方案
最近一直都在用easyui前端框架来开发设计UI,但在使用Dialog时,发现如果页面内容比较多,就会出现问题,首先看一下我的原代码: <input type="button" ...
- (9)分布式下的爬虫Scrapy应该如何做-关于ajax抓取的处理(一)
转载请注明出处:http://www.cnblogs.com/codefish/p/4993809.html 最近在群里频繁的被问到ajax和js的处理问题,我们都知道,现在很多的页面都是用动态加载的 ...
- thread_fork/join并发框架2
转自 http://blog.csdn.net/mr_zhuqiang/article/details/48300229 三.使用异步方式 invokeAll(task1,task2); 是同步方式 ...
- 计算几何 : 凸包学习笔记 --- Graham 扫描法
凸包 (只针对二维平面内的凸包) 一.定义 简单的说,在一个二维平面内有n个点的集合S,现在要你选择一个点集C,C中的点构成一个凸多边形G,使得S集合的所有点要么在G内,要么在G上,并且保证这个凸多边 ...
- Winform开发框架之权限管理系统改进的经验总结(4)-一行代码实现表操作日志记录
在前面介绍了几篇关于我的权限系统改进的一些经验总结,本篇继续这一系列主体,介绍如何一行代码实现重要表的操作日志记录.我们知道,在很多业务系统里面,数据是很敏感的,特别对于一些增加.修改.删除等关键的操 ...
- easyui数据网格视图(Datagrid View)的简单应用
下面介绍datagrid的数据网格详细视图和数据网格的分组视图 1.先引用的js和css文件 1)包含eauyui必备的四个文件easyui.css,icon.css, jquery-min.js.j ...
- 用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
代码地址:https://code.csdn.net/x3dcn/svnauth 以禅道项目管理系统的数据库结构为标准,实现了可用的svn authz验证功能. 以用户名.密码.项目的acl开发程度o ...