`
licjava
  • 浏览: 14279 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android 开发的步骤

 
阅读更多
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);

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics