Android——探究活动1

Android—探究活动1

活动

活动是一种可以包含用户界面的组件,主要用于和用户交互。

1.1.1 Toast

可以使用它将一些小信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button)findViewById(R.id.Button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this,"you click",Toast.LENGTH_SHORT).show();
        }
    });
}

1.通过findViewById()方法获取到在布局文件中定义的元素,返回View对象,这里向下转型转成Button对象,得到按钮实例后,通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮就会执行监听器中的onClick()方法,所以,弹出Toast的功能要在
onClick()方法中编写。
2.Toast通过静态方法makeTest()创建一个Toast对象,然后调show()显示出来,传三个参数,第一个Context,也就是Toast要求的上下文,第二个是Toast显示的文本内容,第三个是时长

1.1.2 Menu

在res目录下新建一个menu的文件夹,右击res目录,New,Directory,输入文件夹名menu,接着,在这个文件夹下新建一个名叫main的菜单文件,右击menu文件夹,New,Menu resource file,文件名输入main,点击ok,在main.xml中添加代码:

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title = "Remove"/>

</menu>

item标签用来创建具体的某一个菜单项,然后通过android:id给这个菜单项指定一个唯一的标识符,通过android:title给这个菜单指定一个名称。
然后在MainActivity中重写**onCreateOptionsMenu()**方法

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main,menu);
    return true;
}

getMenuInflater()方法能获得一个MenuInflater的对象,再调用它的inflate()方法gei当前活动创建菜单,第一个参数指定通过哪一个资源文件来创建菜单,R.menu.main,第二个参数指定我们的菜单项将添加到哪一个Menu对象中,返回true,表示允许创建的菜单显示出来。

再定义菜单响应事件

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.add_item:
            Toast.makeText(this, "you click Add", Toast.LENGTH_SHORT).show();
            break;
        case R.id.remove_item:
            Toast.makeText(this, "you click remove", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return true;
}

在这里插入图片描述
在这里插入图片描述

1.1.3销毁一个活动

点击Back键
修改监听器的代码,finish()方法。

1.2使用Intent在活动之间穿梭

Intent是android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据,一般被用于启动活动,启动服务,发送广播等场景。

1.2.1显式Intent

Intent(),两个参数,Context要求提供一个启动活动的上下文,第二个参数Class是指定想要启动的活动,**startActivite()**方法,专门用于启动活动,接受一个Intent参数

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }
});

1.2.2隐式活动

指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。

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

activity标签下配置intent-filter的内容,可以指定当前活动能够响应的actioncategory,action标签中指明了当前活动可以响应com.example.activitytest.ACTION_START这个action,category标签则包含了一些附加信息,更精确的指明了当前活动能够响应的Intent中还可能带有category。只有action和category中的内容同时匹配上Intent中指定的action和category时,活动才能响应。每个Intent中能指定一个action,但却能指定多个category。

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                startActivity(intent);
            }
        });

1.2.3向下一个活动传递数据

Intent提供了一系列**putExtra()**方法的重载,可以把我们想要传递的数据暂存在Intent中,启动另一个活动,再从Intent中取出来。
例如:想把MainActivity中的数据传到SecondActivity中。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String data = "Hello SecondActivity";
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        intent.putExtra("extra_data",data);
        startActivity(intent);
    }
});


SecondActivity中:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_layout);
    Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");
    Log.d("SecondActivity",data);
}

putExtra()方法接受两个参数,第一个参数是键,用于从后面Intent中取值,第二个参数是真正要传递的数据
在SecondActivity中将传递的数据取出来,通过**getIntent()方法获取到启动SecondActivity的Intent,然后调用getStringExtra()**方法传入相应的键值,就得到传递的数据了。(还有getIntExtra,getBooleanExtra)

1.2.4返回数据给上一个活动

startActivityForResult()方法,这个方法期望在活动销毁的时候能够返回一个结果给上一个活动,接受两个参数,Intent请求码,请求码用于在之后的回调中判断数据的来源。

 public void onClick(View view) {
 	Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivityForResult(intent,1);
 }

这里使用了startActivityForResult()方法来启动SecondActivity,请求码只要是一个唯一值就可以。

Button button2 = (Button) findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent = new Intent();
        intent.putExtra("data_return","Hello MainActivity");
        setResult(RESULT_OK,intent);
        finish();
    }
});

在SecondActivity中给按钮点击注册事件,并在点击事件中添加返回数据的逻辑。构建一个Intent,仅用于传递数据,要把传递的数据存放在Intent中,然后调用setResult()方法,这个方法专门用于向上一个活动返回数据,setResult()方法接受两个参数,第一个参数用于向上一个活动返回处理结果,一般使用RESUT_OKRESULT_CANCELED第二个参数把带有数据的Intent传递回去,然后调用finish()方法来销毁当前活动。
因为我们使用startActivityForResult()方法来启动SecondActivity,在SecondActivity被销毁之后会回调上一个活动的onActivityResult()方法,所以我们需要在MainActivity中重写这个方法来得到返回的数据

@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("data_return",returnedData);
            }
            break;
        default:
    }
}

onActuivityResult()方法有三个参数,第一个requestCode,启动活动时传入的请求码,第二个resultCode,返回数据时传入的处理结果,第三个data,即携带着返回数据的Intent,我们先通过requestCode的值来判断数据来源,确定是从SecondActivity返回的之后,在检查resultCode的值来判断
处理结果是否成功,最后从data中取值并打印出来

补充:如果想通过back键返回,可以在SecondActivity中重写onBackPressed()

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("data_return","Hello MainActivity");
    setResult(RESULT_OK,intent);
    finish();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值