赞
踩
启动状态 运行状态 暂停状态 停止状态 销毁状态
onCreate() | Activity创建时调用 |
---|---|
onStart() | Activity即将可见时调用 |
onResume() | Activity获取焦点时调用 |
onPause() | Activity被其他Activity覆盖或屏幕锁屏时调用 |
onStop() | Activity对用户不可见时调用 |
onDestroy | Activity销毁时调用 |
onRestart() | Activity从停止到启动时调用 |
创建的每一个Activity都必须在清单文件中配置才生效
<activity
android:name=".MyActivity"
android:exported="false" />
(1)在MainActivity中添加按钮单击事件,让其跳转到MyActivity页面
(2)在MyActivity中添加按钮单击事件,关闭当前页面
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("MainActivity","调用onCreate方法"); Button btn = findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //创建Intent对象 跳转到MyActivity页面 Intent intent = new Intent(MainActivity.this,MyActivity.class); startActivity(intent); } }); } }
public class MyActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my); Button btn1 = findViewById(R.id.btn_1); btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //关闭当前页面 finish(); } }); } }
使用 Intent 从一个Activity切换到另一个Activity
不仅可以指定当前组件执行的动作,还可以在不同组件之间数据传递
直接指定目标组件
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
action用来指定Intent对象的动作
在清单文件中为Activity添加 时,必须添加action属性。否则隐式Intent无法开启
<activity
android:name=".C"
android:exported="false">
<intent-filter>
<!-- name 不能与 Activity 重名-->
<action android:name="d" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Intent intent1 = new Intent();
intent1.setAction("d");
startActivity(intent1);
当发送一个隐式Intent后,Android系统会将它与程序中每一个组件的过滤器进行匹配,匹配属性有action、data、category,需要三个属性都匹配成功才能唤起相应组件。
<intent-filter>
<action android:name="android.intent.action.EDIT"/>
······
<intent-filter>
标签中间可以罗列多个action属性,但是当使用隐式Intent激活组件时,只要Intent携带的action与其中一个标签中action的声明相同,action属性就匹配成功。
在清单文件中为Activity添加标签时,必须添加action属性,否则隐式Intent无法开启该Activity。
<intent-filter>
<data android:mimeType="Video/mpeg" android:scheme="http..."/>
···
</intent-filter>
标签中间可以罗列多个data属性,每个data属性可以指定数据的MIME类型和URI。其中MIME类型可以表示image/ipeg、video/*等媒体类型。
隐式Intent携带的data与其中一个标签中data的声明相同,data属性就匹配成功。
<intent-filter>
<category android:name="android.intent.category.DEFAULT"/>
······
</intent-filter>
隐式Intent中声明的category必须全部能够与某一个IntentFilter中的category匹配才算匹配成功。IntentFilter中罗列的category属性数量必须大于或者等于隐式Intent携带的category属性数量时,category属性才能匹配成功。如果一个隐式Intent没有设置category属性,那么它可以通过任何一个IntentFilter的category匹配。
通过putExtra()方法将传递的数据储存在Intent对象中
Intent intent = new Intent(MainActivity.this, FirstActivity.class);
intent.putExtra("name","王小明");
intent.putExtra("age",12);
intent.putExtra("isPassed",true);
startActivity(intent);
接收
// 接收数据并将数据显示在text1
Intent intent = getIntent();
String name = intent.getStringExtra("name");
int age = intent.getIntExtra("age", 0);
boolean isPassed = intent.getBooleanExtra("isPassed", true);
text1.setText(name + ":" + age + ":" + isPassed);
使用Bundle传递数据
Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name","王小明");
bundle.putInt("age",12);
intent1.putExtras(bundle);
startActivity(intent1);
接收
// 接收数据并显示在text2
Bundle bundle = getIntent().getExtras();
String name = bundle.getString("name");
int age = bundle.getInt("age");
text2.setText(name + ":" + age);
用于开启一个Activity,当开启的Activity销毁时,希望从中返回数据。
requestCode表示请求码,用于标识请求来源。
2.setResult()
resultCode表示返回码,用于标识返回的数据来自哪个Activity。
intent用于携带数据并回传到上个界面。
3.onActivityResult()
用于接收回传的数据,并根据传递的参数requestCode、resultCode来识别数据来源
public class MainActivity extends AppCompatActivity { Button btn1; TextView text; @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == 2){ String name = data.getStringExtra("name"); int age = data.getIntExtra("age", 0); text.setText(name + ":" + age); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = findViewById(R.id.text); findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 启动SecondActivity,并且希望其回传数据 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent,1); } }); } }
// 回传数据----将数据传回MainActivity
Intent intent = new Intent();
intent.putExtra("name", "王小明");
intent.putExtra("age", 12);
setResult(2, intent);
finish();
Fragment是一种嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局。
一个Activity可以包含多个Fragment,一个Fragment也可以在多个Activity中使用。
当在Activity中创建Fragment时,Fragment处于启动状态,
当Activity被暂停时,其中的所有Fragment也被暂停,
当Activity被销毁时,其中的所有Fragment也被销毁,
当一个Activity处于运行状态时,可以单独地对每一个Fragment进行操作:添加时Fragment处于启动状态,删除时Fragment处于销毁状态。
Fragment生命周期相比Activity额外方法:
创建Fragment时必须创建一个类继承自Fragement。
public class NewListFragment extends Fragment{
@Override
public View on CreareView(LayoutInflater, inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment,container, false);
return v;
}
}
Fragment创建完成后并不能单独使用,还需要将Fragment添加到Activity中。
<fragment
android:name="cn.itcast.NewsListFragment"
android:id="@+id/newslist"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
public class MainActivity extends Activity{
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
NewsListFragment fragment = new NewsListFragment();
FragmentManage fm = getFragementManager();
FragmentTransaction beginTransaction = fm.beginTransaction();
beginTransaction.replace(R.id.ll,fragment);
beginTransaction.commit();
}
}
“getFragmentManager和android.app.Fragment在API 28中已弃用。
现在,我们应该分别使用支持库中的Fragment和getSupportFragmentManager。
但是,如果您担心这些弃用,则还应注意,API 28也弃用了PreferenceFragments。
相反,您应该使用PreferenceFragmentCompat”
应将getFragementManager替换为getSupportFragmentManager()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。