创建和加载布局以及Intent的用法

话不多说直接开始。

首先我们创建第一个布局Button!这是一个让人停不下来的东西(我很喜欢点)。

我们现在 app -> src -> main -> res ->右键点击目录 ->new directory   取名为 layout ->  右键点击layout 创建 firstlayout.xml

在firstlayout文件中可以创建Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="match_parent" android:orientation="vertical">
   <Button android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:id="@+id/button_1"
         android:text="@string/button_1"
   />
</LinearLayout>

接下来我们为这个button 添加事件监听

public class FirstActivity extends AppCompatActivity {
rotected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.first_layout); // serContentView()方法为当前Activity加载一个布局
    Button button1 = (Button) findViewById(R.id.button_1); // 为button1 添加点击监听,使用findViewId方法
    button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
                     Toast.makeText(FirstActivity.this, "You clicked Button 1",
                     Toast.LENGTH_LONG).show(); //使用Toast 方法发出短小信息提示用户
                  }
             }
}

这样点击以后就会出现提示框了!

然后我们还可以让该按钮跳转到第二个活动,我们先创建第二个活动,选择 new Empety Activity ,创建SecondActivity(创建的时候不勾选Launcher),想要跳转至第二个Activity 我们需要是用Intent方法,修改Button中的代码

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

xianshi

这样我们就可以加载其他的Activity,以上的加载方式为显式加载,下面使用隐式Intent,比起显式要复杂一点,但相应的功能也多了很多。

为了相应隐式Intent的活动,我们需要在AndroidManifest.xml 文件中添加以下的代码

<activity android:name=".SecondActivity">
  <strong> <intent-filter> <!-- 设置隐式 Intent --></strong>
<strong>      <action android:name="com.example.activitytest.ACTION_START"/></strong>
<strong>      <category android:name="android.intent.category.DEFAULT"/></strong>
   </intent-filter>
</activity>

指定当前活动能够响应的action 和 category,只有当Intent中的 action 和 category 能与之相匹配时才会做出反应,修改FirstActivity文件中button中的点击事件代码如下

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
<strong>                     Intent intent = new Intent("com.example.activitytest.ACTION_START");
</strong>                     startActivity(intent);
                  }
             }

在这里我们将 com.example.activitytest.ACTION_START 作为字符串传给了Intent,让intent 去与之匹配然后发生响应,但我们好像这里并没有与 category进行匹配,不要着急,因为我们设置的category中 default 为默认值,所以程序可以识别出来,那么我们现在来添加category。

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
                      // 使用隐式 Intent
                     Intent intent = new Intent("com.example.activitytest.ACTION_START");
<strong>                     intent.addCategory("com.example.activitytest.MY_CATEGORY");
</strong>                     startActivity(intent);
                  }
             }

这时候再运行你会发现,程序崩溃了!别担心,这是因为,我们在活动中添加了添加了category但没有在配置文件中声明我们添加的category,所以我们在配置文件中加

<activity android:name=".SecondActivity">
  <strong> <intent-filter> <!-- 设置隐式 Intent --></strong>
      <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除了可以像这样打开另一个活动,我们还可以让它调用系统的浏览器打开网站,同样修改button按钮。

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
                      // 使用隐式 Intent
                     <strong>Intent intent = new Intent(Intent.ACTION_VIEW);</strong>
<strong>                     intent.setData(Uri.parse("http://www.baidu.com"));
</strong>                     startActivity(intent);
                  }
             }

以上的代码中,Intent.ACTION_VIEW 是安卓系统内的一个内置的动作,然后通过Uri.parse()方法将网址字符转换成一个Uri对象,再调用setData()方法将对象传进去。

与此相对应,我们还可以在<intent-filter>标签中设置<data>标签,用于更精确的指定当前活动能够响应什么类型的数据。

为了更清楚的了解它,让我们再创建一个Activity,并且在布局文件中添加一个Button。然后我们需要修改配置信息中的.ThirdActivity的注册信息。

<activity android:name=".ThirdActivity">
   <intent-filter tools:ignore="AppLinkUrlError">
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <strong><data android:scheme="http"/>   <!-- 指定data标签 scheme = http 将能相应所有http协议的 Intent--></strong>
   </intent-filter>
</activity>

然后再运行程序点击按钮,就会出现以下令人熟悉的一幕。

这个在手机上应该是常见的吧,在浏览器中打开。

除此之外,我们话可以调用手机的拨号功能,修改button代码:

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
                      // 使用隐式 Intent
                     <strong>Intent intent = new Intent(Intent.ACTION_DIAL);</strong>
<strong>                     intent.setData(Uri.parse("tel:10086"));
</strong>                     startActivity(intent);
                  }
             }

我们除了可以利用Intent 来启动活动,我们还可以利用它来传输数据,比如FirstActivity中有一个字符串,我们就可以使用putExtra()的方法将字符串传入下一个活动中,在下一个活动中用 getStringExtra()方法来接收,在FirstActivity中我们可以这样写:

button1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
                      // 使用隐式 Intent
                     String data = "Hello SecondActivity"
                     <strong>Intent intent = new Intent(FirstActivity.this, SecondActivity.class);</strong>
<strong>                     intent.putExtra("extra_data", data);
</strong>                     startActivity(intent);
                  }
             }

在SecondActivity中我们需要来接收:

button2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       <strong> Intent intent = getIntent(); // 获取从FirstActivity 中传递的值</strong>
<strong>        String data = intent.getStringExtra("extra_data");  // 因为传递的是字符型 所以用 getStringExtra</strong>
<strong>        Toast.makeText(SecondActivity.this, data, Toast.LENGTH_SHORT).show();</strong>
<strong>        //finish();</strong>
    }
});

我们还可以返回数据给上一个活动,主要利用startActivityForResult()方法来接收,在FirstActivity中修改代码:

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

接下来我们在SecondActivity中设为按钮注册事件,

<strong>Button button5 = (Button) findViewById(R.id.button_5);</strong>
<strong>button5.setOnClickListener(new View.OnClickListener() {</strong>
<strong>    @Override</strong>
<strong>    public void onClick(View v) {</strong>
<strong>        Intent intent = new Intent();</strong>
<strong>        intent.putExtra("data_return", "Hello FirstActivity");</strong>
<strong>        setResult(RESULT_OK, intent);</strong>
<strong>        finish();</strong>
<strong>    }</strong>
<strong>});</strong>

由于我们使用的是startActivityForResult()方法来启动SecondActivity,所以在SecondActivity被销毁后会回调上一个活动的onActivityResult()方法,因此我们需要在FirstActivity中重写这个方法来得到数据。

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

我们还可以重写SecondActivity的返回键的方法,让它同样实现以上的功能,在SecondActivity中进行onBackPressed()方法重写。

@Override
public void onBackPressed() {    // 重写返回方法 实现数据返回
    Intent intent = new Intent();
    intent.putExtra("data_return", "Hello FirstActivity");
    setResult(RESULT_OK, intent);
    finish();
}

至此这三天的内容我就写完了,感觉上不是很多,但我确实是学了很久,主要还是因为对java的不熟悉,继续努力!!!

 

点赞
  1. xiaobai说道:

    请问您用的什么教程呢?

    1. Super Mario Super Mario说道:

      不是大佬,看着书写的,书名《第一行代码》

  2. kku说道:

    大佬用的啥教程

    1. Super Mario Super Mario说道:

      不是大佬,看着书写的,书名《第一行代码》

Super Mario进行回复 取消回复

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00