收藏本站 收藏本站
积木网首页 - 技术学院 - 软件测试 - 网站黄页 - 常用手册 - 站长工具 - 技术社区
首页 > Android > Android技巧 > 正文

首页 - PHP - 数据库 - 操作系统 - 游戏开发 - JS - Android - MySql - Redis - MongoDB - Win8 - Shell编程 - DOS命令 - jQuery - CSS样式 - Python - Perl

Access - Oracle - DB2 - SQLServer - MsSql2008 - MsSql2005 - Sqlite - PostgreSQL - node.js - extjs - JavaScript vbs - Powershell - Ruby

安卓控件注入

package com.example.smartinject;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import android.app.Activity;
import android.content.res.Resources;
import android.view.LayoutInflater;
import android.view.View;
/**
 * 使用说明:</br>
 * 只需让自定义Activity继承该SupportActivity,然后让自定义Activity的控件字段名称和加载的布局文件中控件的id名称相同即可,
 * 这样在调用setContentView(View view)或setContentView(int layoutResID)后,控件字段就被注入值了,之后就可以调用控件字段所拥有的方法了。</br></br>
 * 若同时在自定义Activity上实现了android.view.View.OnClickListener接口后,点击控件后就会自动调用复写的public void onClick(View v)方法了
 * @author Young
 * @Time 2015-7-4
 */
public class SupportActivity extends Activity {
	public void setContentView(int layoutResID) {
		setContentView(LayoutInflater.from(this).inflate(layoutResID, null));
	};
	@Override
	public void setContentView(View view) {
		// TODO Auto-generated method stub
		super.setContentView(view);
		smartInject();
	}
	private void smartInject() {
		Class<? extends Activity> clz=getClass(); 
		Field[] fs=clz.getDeclaredFields();
		Resources res = getResources();
		String packageName = getPackageName();
		for (Field field : fs) {
			int viewId = res.getIdentifier(field.getName(), "id", packageName);
			if (viewId==0) 
				continue;
			field.setAccessible(true);
			try {
				View v=findViewById(viewId);
				field.set(this,v);
				Class<?> c=field.getType();
				Method m=c.getMethod("setOnClickListener", android.view.View.OnClickListener.class);
				m.invoke(v, this);
			} catch (Exception e) {
				e.printStackTrace();
			}
			field.setAccessible(false);
			
		}
		
	}
}
<pre name="code" class="java">package com.example.smartinject;

import java.util.Date;


import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends SupportActivity implements OnClickListener{
	Button but1;
	Button but2;
	Button but3;
	Button but4;
	TextView tv;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
//		再也不需要下面这么啰嗦恶心的操作了
//		but1=(Button) findViewById(R.id.but1);
//		but2=(Button) findViewById(R.id.but2);
//		but3=(Button) findViewById(R.id.but3);
//		but4=(Button) findViewById(R.id.but4);
//		tv=(TextView) findViewById(R.id.tv);
//		but1.setOnClickListener(this);
//		but2.setOnClickListener(this);
//		but3.setOnClickListener(this);
//		but4.setOnClickListener(this);
//		tv.setOnClickListener(this);
 
		but1.setText("inject ok");
		
	}
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.tv:
			Toast.makeText(getApplicationContext(), "inject", 1).show();
			tv.setText("tv  click  "+new Date().toLocaleString());
			break;
		case R.id.but1:
			Toast.makeText(getApplicationContext(), "inject", 1).show();
			but1.setText("but click "+new Date().toLocaleString());
			break;

		default:
			((TextView)v).setText(""+v.toString()+"  "+System.currentTimeMillis());
			break;
		}
		
	}
	
}





<LinearLayout 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:orientation="vertical" >

    <Button
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button 
        android:id="@+id/but1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"/>
    <Button 
        android:id="@+id/but2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"/>
    <Button 
        android:id="@+id/but3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"/>
    <Button 
        android:id="@+id/but4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="button"/>
</LinearLayout>


版权声明:本文为博主原创文章,未经博主允许不得转载。

安卓获取手机上的联系人
安卓获取手机上的联系人的方式。注:获取联系人需要添加权限:uses-permissionandroid:name=android.permission.READ_CONTACTS/scriptsrc=https://code.csdn.net/snippets/733062.js/s

菜单 和ActionBar
这篇讲了创建optionMenu的方法http://blog.csdn.net/jianghuiquan/article/details/8350519感觉和actionBar的区别主要是showasaction设置的true还是false;里面有很新潮的ActionBar的

android 内存优化方法
转自http://blog.csdn.net/hewence1/article/details/39004301OOM:内存泄露可以引发很多的问题:1.程序卡顿,响应速度慢(内存占用高时JVM虚拟机会频繁触发GC)2.莫

本周排行

更新排行

强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号