您的位置:首页 > 移动开发 > Android开发

Android项目之HomeHealth基础学习3:Intent使用Component

2014-12-21 09:35 453 查看
Intent是在作为Activity之间传递数据的组件,通过intent将数据封装起来,传递到你需要传递的activity中,再在目标Activity中获取到,进行使用

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

[java] view
plaincopy

button.setOnClickListener(new Button.OnClickListener() {  

    @Override  

    public void onClick(View arg0) {  

        // TODO Auto-generated method stub  

        Intent intent = new Intent();  

        String s = "This is a Test.";  

        intent.putExtra("id", s);  

          

        intent.setClass(MainActivity.this, MyActivity.class);  

        startActivity(intent);  

    }  

});  

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

[java] view
plaincopy

TextView text = (TextView)findViewById(R.id.text);  

  

Intent intent = getIntent();  

String str = intent.getStringExtra("id");  

text.setText(str);  


             


现在使用components来做这件事

有两种方式:

[java] view
plaincopy

ComponentName com = new ComponentName(MainActivity.this,MyActivity.class);//first   

              

ComponentName com = new ComponentName("com.example.testcomponent","com.example.testcomponent.MyActivity");//second  

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

一样的,主Activity中:

[java] view
plaincopy

button.setOnClickListener(new Button.OnClickListener() {  

    @Override  

    public void onClick(View arg0) {  

        // TODO Auto-generated method stub  

        Intent intent = new Intent();  

        ComponentName com = new ComponentName(  

                "com.example.testcomponent",  

                "com.example.testcomponent.MyActivity");  

        intent.setComponent(com);  

        String s = "This is a Test.";  

        intent.putExtra("id", s);  

        startActivity(intent);  

    }  

});  

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

[java] view
plaincopy

text = (TextView)findViewById(R.id.text);  

  

Intent intent = getIntent();  

String str = intent.getStringExtra("id");  

ComponentName com = intent.getComponent();  

String pkgName = com.getPackageName();  

String className = com.getClassName();  

text.setText(str + "\n" + pkgName + "\n" + className);  



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

public View getView(int position, View convertView, ViewGroup parent) {
//当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据。增强性能,减少view创建的时间
View view = convertView;
if (view == null) {
//载入xml的layout
view = mInflater.inflate(R.layout.feature_icon, parent, false);

final ViewHolder holder = new ViewHolder();
holder.view = view;
holder.icon = (ImageView) view.findViewById(R.id.icon);
holder.label = (TextView) view.findViewById(R.id.label);
view.setTag(holder);
}

final ResolveInfo info = mApplications.get(position);
final PackageManager pm = mPackageManager;

final ViewHolder holder = (ViewHolder) view.getTag();
holder.icon.setImageDrawable(info.loadIcon(pm));
holder.label.setText(info.loadLabel(pm).toString().toUpperCase(Locale.US));
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Intent intent = new Intent();
<span style="color:#ff0000;">				//在该应用程序中启动另外一个应用程序
intent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
mContext.startActivity(intent);</span>
}
});

return view;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: