Android学习笔记——关于Activity和Fragment的基础使用办法

这里的一些实例代码我已经上传到Github:https://github.com/Silence9102/Exercise_Android/tree/master/Exercise_Activity

一、 Activity从创建到销毁

1. 基础知识部分:

Activity的生命周期流程图:
在这里插入图片描述
Activity生命周期的四个状态及其大概意思:

  1. 运行状态: 此时该Activity正处于屏幕最前面,是正与用户进行交互的界面
  2. 暂停状态: 此时该Activity被其他Activity部分遮挡,可以被看到,但是无法被操作,上图中调用OnPause()方法之后就进入了暂停状态。此时如果系统内存极端低下该Activity将被系统杀掉释放内存
  3. 停止状态: 此时该Activity已经彻底被其他Activity所覆盖,即将被销毁或者等待用户重新唤醒,上图中调用了OnStop()方法就进入了停止状态。这时当系统内存需要被用在其他地方时,停止状态的Activity将被杀掉
  4. 销毁状态: 调用了OnDestroy()方法,此时该Activity的进程已经被杀死
2. 实例部分

一个Activity的创建到销毁所使用的方法:

  1. 创建一个自定义Activity类继承Activity类同时重写其onCreate()方法:
public class CreateActivity_ByJava extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

		//这里的布局文件需要自行在res/layout目录下创建然后在这里以setContentView()方法设置
        super.setContentView(R.layout.createactivity_byjava);

    }
}
  1. 建立该Activity的布局文件并在自定义Activity类中设置为布局
  2. 在AndroidManifest.xml文件中使用activity标签配置自定义的Activity,例如:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.exercise_activity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        tools:ignore="GoogleAppIndexingWarning">

<!--手动创建的CreateActivity_ByJava的配置项-->
        <activity android:name=".CreateActivity_ByJava"></activity>

<!--系统自动创建的MainActivity的配置项-->
        <activity android:name=".MainActivity">
            <intent-filter>
<!--关于下面两个语句的name属性值看这篇博客的介绍:https://blog.csdn.net/lindroid20/article/details/51993247-->
                <action android:name="android.intent.action.MAIN" />
                
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  1. 启动自定义的Activity:
				//通过Intent和startActivity方法来启动新的Activity
                //这里Intent构造参数中第一个参数是上下文对象,第二个是指定好要启动的Activity的主类
                Intent intent = new Intent(MainActivity.this,CreateActivity_ByJava.class);
                startActivity(intent);
  1. 通过finish()方法关闭当前Activity
				//关闭当前Activity,如果是子Activity就返回启动它的父Activity,否则就返回系统主界面
                finish();

二、 通过Bundle和Intent进行Activity之间的数据传输

1. 从当前Activity传输数据到新的Activity

首先在当前Activity中把数据以key-value的方式存储在实例化的bundle中,这里使用了putCharSequence() 方法,存储一组 “key-字符串” 数据,接下来将封装好数据的bundle通过intent传输到新打开的Activity

				//实例化一个Bundle用于存储数据
                Bundle bundle = new Bundle();

                //将在TextView输入的信息以key-value的方式存储在bundle中
                bundle.putCharSequence("name",et_name.getText().toString());

				//将bundle放进intent传递到另一个Activity中
                intent.putExtras(bundle);
                startActivity(intent);

接下来在新打开的Activity中通过Bundle获取到传递过来的数据就可以了,这里的getExtras() 方法是用于获取传输过来的Intent中的bundle,而传输过来的Intent通过getIntent() 方法获取

		//获取从之前的Activity中传递的Intent中的bundle
        Bundle bundle = getIntent().getExtras();

        //在bundle中通过key提取出对应的value
        String name = bundle.getString("name");
2. 从新打开的Activity中获取数据

这里以一个修改头像的实例来叙述过程:

首先在当前Activity以startActivityForResult() 这个方法来启动新的Activity

				//以startActivityForResult方法启动Activity,同时设置0x11为发起修改头像动作的请求码
                startActivityForResult(intent,0x11);

然后在新打开的头像选择Activity选择一个头像并将其资源ID封装到一个实例化的Bundle中,然后通过 setResult() 将数据传输回去

				Intent intent = new Intent();
                Bundle bundle = new Bundle();
                bundle.putInt("imageId",ico[i]);
                intent.putExtras(bundle);

                //将选择的头像资源ID通过intent传回父Activity然后通过finish()方法销毁该Activity
                setResult(0x11,intent);
                finish();
				//将选择的头像资源ID通过intent传回父Activity然后通过finish()方法销毁该Activity
                setResult(0x11,intent);
                finish();

最后在开始的Activity中通过重写onActivityResult() 方法来获取传输回来的数据,这里获取数据也是通过Bundle和Intent

	@Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        //检查requestCode是不是设置的修改头像的识别码
        // 检测返回的resultCode是不是从选择头像Activity返回的识别码
        //关于requestCode和resultCode的解析看这个:https://blog.csdn.net/u010542873/article/details/51219352
        if(requestCode==0x11 && resultCode==0x11){

            //获取从头像展示Activity返回的已选头像图片ID,将头像修改为该图片
            Bundle bundle = data.getExtras();
            ImageView imageView = findViewById(R.id.imageView_main_ico);
            imageView.setImageResource(bundle.getInt("imageId"));
        }
    }

三、 Fragment的基础使用

Fragment有两种方法创建,但是在那之前先创建一个继承Fragment类的自定义fragment类,在其中重写onCreateView()方法,比如这个Message_Fragment:

public class Message_Fragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    //这里的布局方式参数可以是专门创建的专用的布局文件,也可以使用已经存在的布局文件
        return inflater.inflate(R.layout.fragment_message,container,false);
    }
}

两种创建方式:

  • 1 . 静态的在XML布局文件中描述

    在XML文件中使用fragment这个标签来设置一个静态的Fragment,这里会用到一个属性而且这个属性必须被使用并设置好,否则会在应用启动这个fragment时发生闪退:

    • android:name:其作用是指定这个fragment使用哪个配置文件,属性值为配置文件的包路径。比如:android:name="com.example.fragment.Message_Fragment"的属性值就是指使用com.example.fragment包中的Message_Fragment.java配置文件。
  • 2 . 在Java文件中动态创建一个Fragment

    使用下面的一段代码即可在id为main_layout的布局管理器中添加一个自定义好的message_fragment

    		//获取fragment管理器并启动一个fragment事务
            FragmentManager fragmentManager = getFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            
             //实例化一个自定义fragment类作为add()方法的参数
       	     Message_Fragment message_fragment = new Message_Fragment();
       	     
       	     //设置放置fragment的容器id和要放置的fragment
     	     fragmentTransaction.add(R.id.main_layout , message_fragment);
     	     
     	     //提交事务
          	 fragmentTransaction.commit();
    		
    

关于这个Fragment这里只是写了基础使用方式,需要搜索更多与Fragment有关的应用方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值