亲,findViewById写烦了没?交大家一个简单的方法哈

亲,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;
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值