android ui 事件触发机制
Activity 编写中一般为三部曲
1。bending视图
setContentView(R.layout.open);
2。初始化UI
(Button)this.findViewById(R.id.ok);
3。绑定事件
ok.setOnClickListener(this);
localhost 代表是本机ip 127.0.0.1
在android 模拟器上用 10.0.2.2访问你的电脑本机
因为在android中,每个应用程序是可以实现数据共享的,
对于每一个应用程序程序都拥有一个contentprovider实例进行存储,
而contentresolver则是用于管理所有程序的contentprovider实例,
通过contentrescolver可以获得数据,插入数据等……至于getcontentrescolver()就是获取实例
二 。。。。自定义adapter
1。extends baseAdapter类
2。构造一个有参方法
public UserListAdapter(Context context,List<User> list)
{
//2.1 取得布局管理器(为下面的获取自定义视图准备)
layoutInflater = LayoutInflater.from(context);
View view=layoutInflater.inflate(R.layout.list, null);
}
3.在重写getView方法中编辑自定义视图
public View getView(int position, View convertView, ViewGroup parent) {
ListItemView listItemView = null;
if (convertView == null) {
listItemView = new ListItemView();
//获取list_item布局文件的视图
convertView = layoutInflater.inflate(R.layout.list, null);
//获取控件对象
listItemView.image = (ImageView)convertView.findViewById(R.id.IV_imageItem);
listItemView.name= (TextView)convertView.findViewById(R.id.show_name);
listItemView.age= (TextView)convertView.findViewById(R.id.show_age);
listItemView.name.setText(list.get(position).getName()+"");
listItemView.age.setText(list.get(position).getAge()+"岁");
listItemView.image.setImageResource(Integer.parseInt(list.get(position).getImage()+""));
//设置控件集到convertView
convertView.setTag(listItemView);
}
return convertView;
}
///4.反射机制drawble包下的所有图片
File[] fields=R.drawble.class.getDeclaredFields();
for(Filed field:fields){
index=field.getInt(R.drwable.class);
//保存图片id
imgList.add(index);
}
三 。。。。自定义dialog
1。extends Dialog
. 构造有参方法
(注意自定义dialog本身没有上下文的对象,所以要引入目标Activity对象IndexActivity)
public NewBudleDialog(Context context,IndexActivity main) {
super(context);
this.context=context;
this.main=main;
}
2。 // 重写它的onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.open);//自定义布局
findView();//初始化控件
setListeners(); //监听
}
四 SimpleAdapter和gridview在帮助文档中挺好的
五 动态给editText赋值的时候,int类型要转换为String(不然报source Id String 错误)
六 Button和listItemOnClkic ,焦点覆盖问题
七 SlidingDrawer(上下屏车换)
iv= (ImageView) this.findViewById(R.id.handle);
drawer.setOnDrawerOpenListener(new MyDrawerOpenListener());
drawer.setOnDrawerCloseListener(new MyDrawerCloseListener());
}
class MyDrawerOpenListener implements OnDrawerOpenListener{
@Override
public void onDrawerOpened() {
iv.setImageResource(R.drawable.icon);
}
}
class MyDrawerCloseListener implements OnDrawerCloseListener{
@Override
public void onDrawerClosed() {
iv.setImageResource(R.drawable.bt03);
}
}
class MyOnclick implements OnClickListener{
@Override
public void onClick(View v) {
}
}
八。 两个页面间回调函数
A activity 中重写onActivityResult方法
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//tresultCode返回结果值
if(requestCode==1&this.RESULT_OK==resultCode)
result=data.getExtras().getString("result");
Toast.makeText(this,result,Toast.LENGTH_LONG).show();
}
class Mybnt implements OnClickListener{
@Override
public void onClick(View arg0) {
Intent intent=new Intent(MainActivity.this, b.class);
//startActivityForResult跳转,并设定回调值
MainActivity.this.startActivityForResult(intent, 1);
}
}
在B Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.b);
Intent intent=new Intent();
intent.putExtra("result","你通过了");
this.setResult(this.RESULT_OK,intent);
this.finish();
}
九。contentProvider(数据提供者)
继承一个ContentProvider
public class UserDao extends ContentProvider{
private DBHelper helper;
private static final UriMatcher MATCHER=new UriMatcher(UriMatcher.NO_MATCH);
public static final String PROVIDER_URL="com.org.userdao";//这里uri必须注册provider中authorities com.org.userdao
static{
MATCHER.addURI(PROVIDER_URL, "qingyou", 1);//qingyou为表名称
MATCHER.addURI(PROVIDER_URL, "qingyou/#", 2);
}
@Override
public boolean onCreate() {
helper=new DBHelper(this.getContext());
return true;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int num=0;
switch (MATCHER.match(uri)) {
case 1:
num=helper.getReadableDatabase().delete("qingyou",selection, selectionArgs);
break;
case 2:
long id=ContentUris.parseId(uri);
num=helper.getReadableDatabase().delete("qingyou","_id="+id, null);
break;
}
return num;
}
2.在activity中
//注意一定要加qingyou表名称和前缀content://
private Uri uri=Uri.parse("content://com.org.userdao/qingyou");
IndexActivity.this.getContentResolver().query(,,"name=? and password=?");
十。receive(广播)
1.非常住性
Intent intent = new Intent();
intent.setAction("com.szy.aaBroadcastReceiver");
intent.putExtra("message", "又是一个好人!");
TestMainActivity.this.sendBroadcast(intent);
//在extends BroadcastReceiverl类中
Bundle bundle = this.getResultExtras(false);
String tt = bundle.getString("message");
2.常住性广播
注册系统自带的action
3.有序广播 (按级别分,级别高得到先)//得到后可以截断:this.abortBroadcast();
4.无序广播(同时发送)
十一。服务
//
1.public class MyService extends Service{
private MyBinder binder2;
/* 成功绑定Activity和Service后调用该方法 */
@Override
public IBinder onBind(Intent arg0) {
binder2=new MyBinder();
return binder2;
}
/* 解除绑定Activity和Service时调用该方法 */
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
/* 重新绑定Activity和Service时调用该方法 */
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
}
/* 当服务第1次创建时调用该方法,只执行一次 */
@Override
public void onCreate() {
super.onCreate();
}
/* 当开始服务时调用该方法,执行多次 */
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
/* 当服务销毁时调用该方法,只执行一次 */
@Override
public void onDestroy() {
super.onDestroy();
}
public void aa(){
for(int i=0;i<50;i++){
try {
Thread.sleep(600);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("aa"+i);
}
}
//注意activity只提供绑定serviceconnection对象,而serviceconnection只能传递IBinder
//所以只能通过他取得service对象
//创建一个binder,写一个方法为他返回要绑定的Service对象
class MyBinder extends Binder implements IBinder{
public MyService getMyService(){
return MyService.this;
}
}
}
2.在activity中写
1.绑定 Intent intent = new Intent(MainActivity.this, MyService.class);
/*MainActivity.this.startService(intent);*/
MainActivity.this.bindService(intent, serviceConection,
Context.BIND_AUTO_CREATE);
2.解绑 /*MainActivity.this.startService(intent);
对应是MainActivity.this.stopService(intent)*/
MainActivity.this.unbindService(serviceConection);
//创建ServiceConnection通过取得service的binder对象
class MyServiceConect implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName arg0, IBinder service) {
myService = ((MyService.MyBinder) service).getMyService();
myService.aa();
myService.bb();
}
//获取sdcard存放路径
String path=Environment.getExternalStorageDirectory()+"/";//获取外部设备路径
十二 作用
android中flag设置 Intent intent = new Intent(this,xxx.class);
//如果activity在task存在,拿到最顶端,不会启动新的Activity
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
//如果activity在task存在,将Activity之上的所有Activity结束掉
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//默认的跳转类型,将Activity放到一个新的Task中
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//如果Activity已经运行到了Task,再次跳转不会在运行这个Activity
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);