Android学习笔记——Activity活动(下)

接着上回的继续写。关于Activity这块的话,我觉得最重要的就是Intent这块的知识了。Activity之间的跳转,Activity与Fragment之间的跳转,Activity与普通类之间的跳转基本上都离不开Intent。所以先来说下Intent的两种启动方式。

显示启动:

在显示启动中,也有好几种写法,第一种写法:class跳转

//最简单的一种写法,直接在startActivity中new一个Intent,里面传入两个参数,一个是本活动的上下文,一个就是目标活动的类名
                startActivity(new Intent(MainActivity.this, SecondActivity.class));

第二种写法:包名.类名跳转

Intent intent = new Intent();
                intent.setClassName(MainActivity.this, "com.tgtxyzs.myapplication.SecondActivity");
                startActivity(intent);

第三种写法:ComponentName跳转

Intent intent = new Intent();
                intent.setComponent(new ComponentName(MainActivity.this, SecondActivity.class));
                startActivity(intent);

这几种方式的话都是适用于Activity之间的跳转,至于Activity与Fragment之间的跳转需要根据特定的场景去写。第一种写法用的比较多,也比较简单。

隐式启动:

隐式启动的话首先要到配置清单文件中进行设置

<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="start.SecondActivity"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

action中的name是Java代码中setAction()中传入的参数,category必须得设置为DEFAULT,不然会报异常。然后在Java代码中要这么写

Intent intent = new Intent();
intent.setAction("start.SecondActivity");
startActivity(intent);

如果在隐式启动的时候有两个Activity中的action的name设置相同,那么在点击跳转的时候,系统会弹出提示对话框,然你选择一个活动进行跳转

Intent的参数传递:

在Activity之间使用Intent进行跳转的话难免会要把数据进行传输,其中,这个Intent也可以进行数据的传输,这个数据传输的方法也比较多。

第一种方式,直接使用intent进行传输数据

//发送端的Activity
Intent intent = new Intent();
intent.putExtra("name", "hahaha");
intent.putExtra("age", 13);
intent.setAction("start.SecondActivity");
startActivity(intent);

//接收端的Activity
 String name = getIntent().getStringExtra("name");
 int age = getIntent().getIntExtra("age", 0);
 Log.e("Data", name + "," + age );

第二种方式,使用Bundle数据集进行数据传输:

//Activity发送方
Intent intent = new Intent();
intent.setAction("start.SecondActivity");
Bundle bundle = new Bundle();
bundle.putString("name", "hahaha");
bundle.putInt("age", 13);
intent.putExtra("bundle", bundle);
startActivity(intent);

//Activity接收端
Bundle bundle = getIntent().getBundleExtra("bundle");
String name = bundle.getString("name");
int age = bundle.getInt("age");
Log.e("Data", name + "," + age );

第三种方式,使用entity实例进行传输:

首先需要创建一个entity实例,然后需要实现Serializable:

public class Person implements Serializable {
    public String name;
    public int age;
}

然后就是

//Activity发送方代码
  Intent intent = new Intent();
  intent.setAction("start.SecondActivity");
 Person person = new Person();
  person.name = "hahah";
  person.age = 13;
  intent.putExtra("person", person);
  startActivity(intent);

//Activity接收方代码
Person person = (Person) getIntent().getSerializableExtra("person");
String name = person.name;
int age = person.age;
Log.e("Data", name + "," + age );

以上三种都是使用起来比较方便的,当然,还有很多传输数据的方法,但是我觉得使用起来没这几个方便就没写了。

Activity数据回传:

这个功能我觉得用的应该也是比较多的,使用起来也比较简单。首先在Intent中需要调用startActivityForResult方法

Intent intent = new Intent();
intent.setAction("start.SecondActivity");
startActivityForResult(intent, 100);

然后还有复写onActivityResult方法:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    String back_data = data.getStringExtra("data");
    Log.e("startActivityForResult", back_data);
}

最后的话还需要在参数传递方写下传递代码

Intent intent = new Intent();
intent.putExtra("data", "这是一段回传数据");
setResult(RESULT_OK, intent);

关于Activity这块,我所学到的都总结了,当然还有很多我没还有掌握到的关于Activity这方面的知识,我会再接下来的学习中继续深入的!!!

猜你喜欢

转载自blog.csdn.net/qq_41761692/article/details/81588351