Android开发---探究活动(二)

在活动中使用Toast(这里只简单介绍和Toast的使用)

Toast是Android系统提供的一种提醒方式,可以使用它发送一些信息提示给用户,一段时间后会自动消失,不占用屏幕空间。

使用案例:定义一个触发点,例如在之前建立的活动中添加一个按钮,重写按钮的点击事件弹出一个Toast。在onCreate()中添加如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

上述代码中可以看出定义了一个按钮,按钮的id="@+id/button",这里有一点要注意在定义id的时候有三种形式,表现的含义也不一样:

  1. android:id="@android:id/tabhost" 调用系统内部的的id
  2. android:id="@+id/button" 定义一个新的id
  3. android:id=@id/button 使用一个已经存在的id号引用(跟第一个不同,这里引用的不是系统的
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        //获取到按钮
        Button button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast用法
                Toast.makeText(MainActivity.this,"You clicken Button1",Toast.LENGTH_SHORT).show();

            }
        });
    }

上述java代码中使用了一个回调机制实现了一个点击事件。这里的重点在Toast的时候,回调的具体机制可以去看源码,后面的自定义控件中会涉及到。andoid监听事件的回调机制可以参考这篇博客:点击打开链接

这里利用了按钮的点击事件去测试Toast的使用运行结果如下(点击按钮屏幕下方弹出了You clicken Button1):





在活动中使用Menu

要创建选项菜单,首先需要定义一个菜单的布局,查看res目录下是否有menu这个文件夹,没有的就新建一个,在这个文件夹下面添加一个布局。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/add_item"
          android:title="Add"/>
    <item android:id="@+id/removr_item"
          android:title="Remove"/>
</menu>

然后在使用Menu的活动重写onCreateOptionsMenu()

    //创建Menu
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;

    }
    //监听Menu的选中事件
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"You clicken Add",Toast.LENGTH_SHORT).show();
                break;
            case R.id.removr_item:
                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }


在活动中使用Intent

在android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,android则根据此Intent的描述,负责找到对应组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可yongyu用于应用程序内部Activity/Service之间的交互。因此Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者之间的解耦。

显示启用活动的方法:构建一个Intent,传入MainActivity.ths作为上下文,传入secondActivity.class作为活动目标。

 //显式启用活动
 Intent intent = new Intent(MainActivity.this,secondActivity.class);
 startActivity(intent);

隐式启用活动的方法:

AndroidMainfes.xml中定义某个Activity的intent-fliter

<activity android:name=".secondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
        </activity>
 //隐式启用活动
 Intent intent=new Intent("com.example.activitytest.ACTION_START");
 intent.addCategory("com.example.activitytest.MY_CATEGORY");
 startActivity(intent);

隐式启动活动在启动的时候是不明确的,需要匹配系统或者AndroidMainfes.xml中的intent-fliter,只有action和category完全匹配时才会启动。

隐式启动不仅可以启动自己的Activity,还可以启动其他应用Activity:

                //隐式启用活动更多用法---调用本地浏览器浏览网页
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("http://www.baidu.com"));
                startActivity(intent);

                //隐式启用活动更多用法---调用系统拨号界面
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);

活动之间传递数据(向下一个活动传递数据)

在启动活动时传递数的思路很简单,Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据从Intent中取出。

       //向下一个活动传递数据
       String data="Hello SecondActivity";
       Intent intent=new Intent(MainActivity.this,secondActivity.class);
       intent.putExtra("extra_data",data);
       startActivity(intent);
        //接收上一个活动传递过来的数据
        Intent intent=getIntent();
        String data=intent.getStringExtra("extra_data");
        Log.d("SecondActivity",data);

活动之间传递数据(返回数据给上一个活动)

在Activity中还有一个starActivityForResult()方法也是用于启动活动,这个方法在活动销毁的时候能够返回一个结果给上一个活动。

starActivityForResult()方法接收两个参数,第一个参数是Intent,第二个参数是请求码,用于回调中标识返回数据的来源。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layout);
        //创建menu
        //获取到按钮
        Button button1=(Button)findViewById(R.id.button);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,secondActivity.class);
                startActivityForResult(intent,1);
            }
        });
    }

    //重写页面返回回调事件
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode){
            case 1:
                if (resultCode==RESULT_OK){
                    String returnData=data.getStringExtra("data_return");
                    Log.d("MainActivity",returnData);
                }
        }
    }
}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_layout);
        Button button=(Button)findViewById(R.id.button2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent();
                intent.putExtra("data_return","Hello MainActivity");
                setResult(RESULT_OK,intent);
                finish();
            }
        });
    }

    //重写返回按钮事件
    @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、付费专栏及课程。

余额充值