作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16581787.html
Activity Fragment
一个layout 界面,需要一个 activity
一个 activity 可以包含 多个 fragment ,fragment 依赖于 activity,不能单独存在,activity管理fragment
Activity的创建三部曲
新建类继承Activity或其子类
在AndroidManifest中声明
创建layout并在Activity的onCreate中设置
基本属性
设置 APP 的名字
android:label="@string/app_name2"
将上面的 横框 去掉
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
可以设置 横屏 竖屏
android:screenOrientation=""
可以设置 启动模式
android:launchMode=""
默认启动 哪一个 activity 加 intent-filter
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
activity的生命周期
onResume() 重新刷新
onPause() 暂停方法
假如,你正在玩游戏,然后来了一个电话,
这时候就会执行onPause() 方法,等你打完电话时,重新进入会执行 onResume() 方法,然后继续执行后面的方法
public class LifeCycleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
Log.d("lifecycle","_________________onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d("lifecycle","_________________onStart");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("lifecycle","_________________onRestart");
}
@Override
protected void onResume() {
super.onResume();
Log.d("lifecycle","_________________onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d("lifecycle","_________________onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d("lifecycle","_________________onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("lifecycle","_________________onDestroy");
}
}
Activity的跳转和数据传递
显式跳转和隐式跳转
Activity之间的数据传递
startActivityForResult :启动Activity,结束后返回结果
隐式跳转
public class AActivity extends AppCompatActivity {
private Button mBtnJump;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
mBtnJump = findViewById(R.id.jump);
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
数据传递 A 到 B
AActivity 传入数据,BActivity 接收数据
public class AActivity extends AppCompatActivity {
private Button mBtnJump;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
mBtnJump = findViewById(R.id.jump);
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
public class BActivity extends AppCompatActivity {
private TextView mTvTitle;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
mTvTitle = findViewById(R.id.tv_title);
数据回传
<?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:id="@+id/jump"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:text="jump"/>
</LinearLayout>
<?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">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="20sp"
/>
<Button
android:id="@+id/finish"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="finish"
/>
</LinearLayout>
public class AActivity extends AppCompatActivity {
private Button mBtnJump;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
mBtnJump = findViewById(R.id.jump);
mBtnJump.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
public class BActivity extends AppCompatActivity {
private TextView mTvTitle;
private Button mBtnFinish;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
mTvTitle = findViewById(R.id.tv_title);
mBtnFinish = findViewById(R.id.finish);
Activity 的四种启动模式
Fragment
Fragment 1
Fragment有自己的生命周期
Fragment依赖于Activity【当Activity销毁的时候Fragment会同步被销毁】
Fragment通过getActivity()可以获取所在的Activity;Activity通过FragmentManager的findFragmentById()或findFragmentByTag()获取Fragment
Fragment和Activity是多对多的关系【一个Fragment可以存在于多个Activity当中,可以被多个Activity所包含,多个Fragment也可以在一个Activity当中】
fragment 传参取参,显示界面
public class ContainerActivity extends AppCompatActivity {
private AFragment aFragment;
private BFragment bFragment;
private Button mBtnChange;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_container);
mBtnChange = findViewById(R.id.btn_change);
mBtnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (bFragment == null){
bFragment = new BFragment();
}
getSupportFragmentManager().beginTransaction().replace(R.id.fl_container,bFragment).commitAllowingStateLoss();
}
});
public class AFragment extends Fragment {
private TextView mTvTitle;
public static AFragment newInstance(String title){
AFragment aFragment= new AFragment();
Bundle bundle= new Bundle();
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button
android:id="@+id/btn_change"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更换 Fragment"/>
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btn_change">
</FrameLayout>
</RelativeLayout>
<?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"
android:gravity="center">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="我是AFragment"
android:textSize="20sp"
android:gravity="center"
/>
</LinearLayout>
fragment 回退栈
public class AFragment extends Fragment {
private TextView mTvTitle;
private Button mBtnChange,mBtnReset;
private BFragment bFragment;
public static AFragment newInstance(String title){
AFragment aFragment= new AFragment();
Bundle bundle= new Bundle();