接着上回的继续写。关于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这方面的知识,我会再接下来的学习中继续深入的!!!