Android入门(三)——四大组件之一 Activity

活动(Activity)

一、Activity生命周期

在这里插入图片描述
如果想要实现横竖屏切换
>

二、Activity 跳转与数据传递

1、页面跳转

跳转实现的显示和隐式方法—— Intent

        public void click (View view){
        //显示一
            Intent intent = new Intent(MainActivity.this, Main2Activity.class);
            startActivity(intent);
        //显示其他方法
            Intent intent = new Intent();
            intent.setClass(this,Main2Activity.class);
            intent.setClassName(this, "com.example.helloworld.Main2Activity");
            intent.setComponent(new ComponentName(this,"com.example.helloworld.Main2Activity"))
            startActivity(intent);
        //隐式
            Intent intent = new Intent();
            //和下面的action-name要一样
            intent.setAction("android.test.activity2");
            startActivity(intent);
        }
        // 在 AndroidManifest.xml
        <activity android:name=".Main2Activity">
            <intent-filter>
                <action android:name="android.test.activity2" />
               // category 这里注意修改为 DEFAULT
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
2、数据传递

Bundle 类传递数据
Bundle 类与 Map 接口比较类似,都是通过键值对的形式保存数据

putExtra() 方法
使用Bundle对象保存完后,调用 Intent 对象里面的 putExtras() 方法将数据封装到 Intent 对象中。
在这里插入图片描述

然后使用 getIntent().getExtras() 获取到 Bundle 对象
在这里插入图片描述

3、数据回传

startActivityForResult(Intent intent, int requestCode)
此方法用于开启一个Activity,当开启的 Activity 被销毁时,会从销毁的 Activity 中返回数据。
在这里插入图片描述

setResult(int resultCode, Intent intent) 携带数据进行回传
resultCode 为返回码在这里插入图片描述

onActivityResult(int requestCode, int resultCode, Intent intent) 接收回传数据
在这里插入图片描述

三、Activity 任务栈和四种启动模式

standard 标准默认模式
每启动一个 Activity,就会在栈顶创建一个新的事例。

singleTop:Task栈顶复用模式
如果 Activity 在栈顶,直接复用,否则创建新的实例。

singleTask:Task栈内复用模式
在同一个任务栈中,如果要启动的目标 Activity 已经在栈内,则会复用该 Activity,并调用其 onNewIntent() 方法,并且该Activity上面的所有 Activity 会被清除:如果栈中没有,则创建新的实例。

singleInstance:全局单例模式
全局复用,不管哪个Task栈,只要存在目标Activity,就复用。每个Activity占有一个新的Task栈。

四、碎片Fragment —— 可以实现 nav 功能

Fragment 有自己的生命周期
Fragment 依赖于Activity
Fragment 和 Activity 是多对多的关系

onPause():当开启一个新的Activity或替换一个新的Fragment时,系统调用此方法,此时用户将要离开与Fragment界面的交互,因此一般来讲应在此方法中保存一些需要持久化的变化。
在这里插入图片描述

重写并实现Fragment生命周期函数中的onCreate()、onCreateView()和onPause()

1、创建 Fragment 时,必须创建一个类继承 Fragment

在这里插入图片描述

public class BlankFragment extends Fragment {
    private TextView textView;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_blank,container,false);
        return view;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        textView = view.findViewById(R.id.textView);
        textView.setText("进入到了BlankFragment");
    }
}
2、在需要展示的布局文件中添加 Fragment
    <FrameLayout
        android:id="@+id/fragment"
        android:name="com.example.helloworld.BlankFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/btn_change"
        ></FrameLayout>
3、在 Activity 中 动态加载 Fragment

在这里插入图片描述
补充:addToBackStack(null) 回退一步

4、Fragment 和 Activity 通信

方法一:在 Container.java 里面写个 setData() 方法

    public void setData(String text) {
        textView.setText(text);
}

在 BlankFragment 里通过 getActivity() 可以获取所在的Activity;
在这里插入图片描述
方法二:Fragment 里声明接口

    public interface IOnMessageClick{
        void onClick(String text);
    }

Activity 里实现接口

public class Container extends AppCompatActivity implements BlankFragment.IOnMessageClick{......}

重写 onAttach() 方法

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            iOnMessageClick = (IOnMessageClick)context;
        }catch(ClassCastException e){
            throw new ClassCastException("must implement IOnMessageClick");
        }
    }

使用 onClick 方法实现

@Override
public void onClick(View view) {
//    ((Container)getActivity()).setData("你好");
      iOnMessageClick.onClick("你好");
}

Activity 通过 FragmentManager 的 findFragmentById() 或 findFragmentByTag() 获取 Fragment

Fragment 还有很多,没有深究,这只是入门,勿怪 ~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值