Intent使用Component

来源:互联网 发布:淘宝网 情侣装 编辑:程序博客网 时间:2024/05/18 14:45

Intent是在作为Activity之间传递数据的组件,通过intent将数据封装起来,传递到你需要传递的activity中,再在目标Activity中获取到,进行使用

之前没有用过component,一直使用的最简洁的方式来的

[java] view plaincopy
  1. button.setOnClickListener(new Button.OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View arg0) {  
  4.         // TODO Auto-generated method stub  
  5.         Intent intent = new Intent();  
  6.         String s = "This is a Test.";  
  7.         intent.putExtra("id", s);  
  8.           
  9.         intent.setClass(MainActivity.this, MyActivity.class);  
  10.         startActivity(intent);  
  11.     }  
  12. });  

在目标Activity中获取 传递过去的数据:

[java] view plaincopy

  1. TextView text = (TextView)findViewById(R.id.text);  
  2.   
  3. Intent intent = getIntent();  
  4. String str = intent.getStringExtra("id");  
  5. text.setText(str);  

             

现在使用components来做这件事

有两种方式:

[java] view plaincopy
  1. ComponentName com = new ComponentName(MainActivity.this,MyActivity.class);//first   
  2.               
  3. ComponentName com = new ComponentName("com.example.testcomponent","com.example.testcomponent.MyActivity");//second  

第二种方式的第二个参数必须写全包名,不然会报错的

一样的,主Activity中:

[java] view plaincopy
  1. button.setOnClickListener(new Button.OnClickListener() {  
  2.     @Override  
  3.     public void onClick(View arg0) {  
  4.         // TODO Auto-generated method stub  
  5.         Intent intent = new Intent();  
  6.         ComponentName com = new ComponentName(  
  7.                 "com.example.testcomponent",  
  8.                 "com.example.testcomponent.MyActivity");  
  9.         intent.setComponent(com);  
  10.         String s = "This is a Test.";  
  11.         intent.putExtra("id", s);  
  12.         startActivity(intent);  
  13.     }  
  14. });  


在目标Ativity中获取数据和上面是一样的,但是,在目标Activity中就可以获取到源目标,知道是从哪儿传递过来的:

[java] view plaincopy
  1. text = (TextView)findViewById(R.id.text);  
  2.   
  3. Intent intent = getIntent();  
  4. String str = intent.getStringExtra("id");  
  5. ComponentName com = intent.getComponent();  
  6. String pkgName = com.getPackageName();  
  7. String className = com.getClassName();  
  8. text.setText(str + "\n" + pkgName + "\n" + className);  



那项目中用到的component,是在显示出九宫格之后,通过click监听事件,获取用户的点击事件,然后通过component调用九宫格中对应的bpm,dfu,hrs等程序,具体代码在AppAdapter.java中红色字体部分:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. public View getView(int position, View convertView, ViewGroup parent) {  
  2.         //当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。增强性能,减少view创建的时间  
  3.         View view = convertView;  
  4.         if (view == null) {  
  5.             //载入xml的layout  
  6.             view = mInflater.inflate(R.layout.feature_icon, parent, false);  
  7.   
  8.             final ViewHolder holder = new ViewHolder();  
  9.             holder.view = view;  
  10.             holder.icon = (ImageView) view.findViewById(R.id.icon);  
  11.             holder.label = (TextView) view.findViewById(R.id.label);  
  12.             view.setTag(holder);  
  13.         }  
  14.   
  15.         final ResolveInfo info = mApplications.get(position);  
  16.         final PackageManager pm = mPackageManager;  
  17.   
  18.         final ViewHolder holder = (ViewHolder) view.getTag();  
  19.         holder.icon.setImageDrawable(info.loadIcon(pm));  
  20.         holder.label.setText(info.loadLabel(pm).toString().toUpperCase(Locale.US));  
  21.         holder.view.setOnClickListener(new View.OnClickListener() {  
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 final Intent intent = new Intent();  
  25. <span style="color:#ff0000;">             //在该应用程序中启动另外一个应用程序  
  26.                 intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));  
  27.                 intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);  
  28.                 mContext.startActivity(intent);</span>  
  29.             }  
  30.         });  
  31.   
  32.         return view;  
  33.     }  
0 0