android基础(四)

来源:互联网 发布:跑跑卡丁车淘宝买号 编辑:程序博客网 时间:2024/06/01 10:48

Intent


Intent是Android程序中各组件之间进行交互的一种重要方式

  • 指明当前组件想要执行的动作
  • 在不同组件中传递数据
    Intent一般可用于启动活动,启动服务,发送广播等场景

学习如何使用之前,先建好两个活动(这里在上一个程序的基础上再建一个活动即可)

使用显式intent

重写第一个活动中按钮的点击事件

                    button1.setOnClickListener(new View.OnClickListener(){                        @Override            public void onClick(View v){                Intent intent = new Intent(login.this, SecondActivity.class);                startActivity(intent);            }        });

构建一个Intent,传入login.this作为上下文,传入SecondActivity.class作为目标活动
在login活动的基础上打开SecondActivity这个活动,然后通过startActivity()方法执行这个Intent


使用隐式intent

使用隐式Intent需要对第二个Activity进行配置
<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category

        </activity>        <activity android:name="second.SecondActivity">            <intent-filter>                <action android:name="com.example.administrator.logintest.ACTION_START"/>                <category android:name="android.intent.category.DEFAULT"/>            </intent-filter>        </activity>

<action>标签中我们指明了当前活动可以响应com.example.administrator.logintest.ACTION_START这个action,而<category>标签包含了一些附加信息,更精确地指明了当前的活动能够响应Intent中 可能带有的category,只有<action><category>内容同时匹配才能响应Intent

修改login中的点击事件

            public void onClick(View v){                Intent intent = new Intent("com.example.administrator.logintest.ACTION_START");                startActivity(intent);            }

使用Intent的另一个构造函数,直接将action的字符串传进来,能响应com.example.administrator.logintest.ACTION_START这个action活动
这里没有category没有指定因为android.intent.category.DEFAULT是默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中.

也可以用
<category android:name="com.example.administrator.logintest.MY_CATEGORY"/>
Intent.addCategory("com.example.administrator.logintest.MY_CATEGORY");
这两句话添加到响应的地方


向下一个活动传递数据

            public void onClick(View v){                            String data ="Hello SecondActivity";                Intent intent = new Intent(login.this,SecondActivity.class);                            intent.putExtra("extra_data",data);                startActivity(intent);            }

修改第一个活动中的点击事件
在这里使用显式Intent方式启动SecondActivity,
putExtra()接受两个参数,第一个是键,用于从后面Intent取值,第二个是要传递的数据

public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState){        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_second);        Intent intent = getIntent();        String data = intent.getStringExtra("extra_data");        Log.d("SecondActivity",data);    }}

getIntent()启动SecondActivity的Intent
getStringExtra()传入相应键值//因为是String类型所以是getStringExtra()
在logcat中可以看到Hello SecondActivity的字样


返回数据给上一个活动

在这里使用一个startActivityForResult()方法,这个方法期望在活动销毁时能返回一个结果给上一个活动

                    button1.setOnClickListener(new View.OnClickListener(){                        @Override            public void onClick(View v){                Intent intent = new Intent(login.this,SecondActivity.class);                startActivityForResult(intent,1);            }        });

这里请求码只要是个唯一值就行
然后修改活动二的点击时间

        button2.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {                Intent intent =new Intent();                intent.putExtra("data_return","Hello FirstActivity");                setResult(RESULT_OK,intent);                finish();            }        });

在这儿构建了一个Intent,这个Intent仅仅用来传递数据
调用setResult()方法,专门用于向上一个活动返回数据
setResult()接收两个参数

  • 第一个用来向上个活动返回处理结果,一般只用RESULT_OK或RESULT_CANCELED这两个值
  • 第二个参数是把带有数据的Intent传递回去
    然后调用finish()方法来销毁当前活动

重写第一个活动中的onActivityResult()

    @Override    protected void onActivityResult(int requestCode,int resultCode,Intent data){        switch (requestCode){            case 1:                if(resultCode==RESULT_OK){                    String returnedData= data.getStringExtra("data_return");                    Log.d("FirstActivity",returnedData);                }                break;            default:        }    }

这里onActivityResult()有三个参数

  • 第一个参数requestCode 启动活动时传入请求码
  • 第二个参数resultCode 返回数据的 时候传入的处理结果
  • 第三个参数data 携带着返回数据的Intent

另外按下back键返回实现这个效果可以重写onBackPressed()方法

    @Override    public void onBackPressed(){        Intent intent = new Intent();        intent.putExtra("data_return","Hello FirstActivity");        setResult(RESULT_OK,intent);        finish();    }
0 0