亲,findViewById写烦了没?交大家一个简单的方法,这样可以省去很多麻烦的,特别是复杂的布局,acyivity和fragment都可以用的额,好了,不说废话了,直接上代码哈,
注释
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* findViewById 注释
* @author dy
*
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Notes {
// id就是控件id,在某一个控件上使用注解标注其id
int id() default -1;
}
import java.lang.reflect.Field;
import android.app.Activity;
import android.app.Fragment;
import android.view.View;
/**
* 设置findViewById注释
* @author dy
*
*/
public class FindViewByIdUtils {
/**
* activity 注释
* @param activity
*/
public static void autoNotesAllField(Activity activity)
{
//得到Activity对应的Class
Class clazz=activity.getClass();
//得到该Activity的所有字段
Field[] fields=clazz.getDeclaredFields();
for(Field field :fields)
{
//判断字段是否标注InjectView
if(field.isAnnotationPresent(Notes.class))
{
//如果标注了,就获得它的id
Notes notes=field.getAnnotation(Notes.class);
int id=notes.id();
if(id>0)
{
//反射访问私有成员,必须加上这句
field.setAccessible(true);
//然后对这个属性复制
try {
field.set(activity, activity.findViewById(id));
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
/**
* fragment 注释
* @param fragment
* @param v
*/
public static void autoNotesAllField(Fragment fragment ,View v)
{
//得到Activity对应的Class
Class clazz=fragment.getClass();
//得到该Activity的所有字段
Field[] fields=clazz.getDeclaredFields();
for(Field field :fields)
{
//判断字段是否标注InjectView
if(field.isAnnotationPresent(Notes.class))
{
//如果标注了,就获得它的id
Notes notes=field.getAnnotation(Notes.class);
int id=notes.id();
if(id>0)
{
//反射访问私有成员,必须加上这句
field.setAccessible(true);
//然后对这个属性复制
try {
field.set(fragment, v.findViewById(id));
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
activity
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class Ceshi extends Activity {
@Notes(id=R.id.ceshi_btn)
Button ceshi_btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ceshi);
FindViewByIdUtils.autoNotesAllField(this);
ceshi_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ceshi_btn.setText("好好学习,天天向上");
Toast.makeText(Ceshi.this, "好好学习,天天向上", 0).show();
}
});
}
}
fragment
import android.annotation.SuppressLint;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
@SuppressLint("NewApi")
public class PageFragment extends Fragment {
View view;
@Notes(id=R.id.page_btn)
Button page_btn;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.page, container, false);
FindViewByIdUtils.autoNotesAllField(this,view);
page_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
page_btn.setText("come hear");
Toast.makeText(getActivity(), "come hear", 0).show();
}
});
return view;
}
}