8.Intent携带信息返回上一个界面实现基本信息的设置

本次我们实现这样的功能是,

两个界面,第一个界面用于对第二个界面填写的值进行显示,

如下面

这是一个初始界面,

 

 

然后点击设置个人资料的时候会跳转

 

 

然后填好这些个EditText

 

 

 然后点击确认就可以返回到开始界面并且能够把设置好的值显示出来

 

 

 

功能演示就是这样,那么下面我们来分析一下如何完成这样一个功能的app的编程

第一步我习惯是做界面,把界面做好,然后编写逻辑代码

界面就两个,第一个里面有两个控件,第二个里面有好几个控件,

实际上就用到了三种

Button,EditText,TextView

 

第二步,这个按钮是一定要有点击事件的对吧,

不然怎么跳转的界面呢,

第二个界面往第一个界面跳转的时候

那是要获取这个输入的信息的。

这个应该是有一个获取EditText值的这么一个方法,

获取到了返回到第一个界面就可以了,

 

这些大概就是我们在拿到这个功能介绍之后能够想到的就大概是这些

 

现在开始说我们本次编程的思路,

因为作为一个编程小白,我在学习的过程中,

会看一些书,会看一些视频,会上一上专业课

我会把侧重点放在思想和意识上,

人称意识流学习就是需要这样,

掌握主题思想,查询编程细节

反正会让我事半功倍,

好了,开始聊思路,

我们实现这个功能也很简单,

实例化,点击事件大家都会,跳过这一段,

我们使用一个

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //继承了父类自动生成
    super.onActivityResult(requestCode, resultCode, data);}

这样的一个方法,他和我们界面中的oncreate这个方法是同级别的

所以你知道他的位置应该是写在oncreate方法的后面了把。

我们就是通过他来实现的我们的返回功能,

我们观察这个方法会有三个参数

第一个参数叫做请求码

第二个叫做结果码

第三个是传回来的意图,当然这个 意图是为了带回特殊资料的

能够了解这三个参数,这个回传方法就了解了百分之80了

 

请求码,用在第一个界面的代码里面的点击事件,完成意图的设置之后,

这里我们的意图是跳转界面。所以意图:

        //匿名内部类实现按钮点击事件
        bbtt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //实现一个可以跳转界面的实例
                Intent myin = new Intent(MainActivity.this,Second.class);
                //开启意图,并设置请求码是0,相当于设置一个监听或者中断
                //这个中断将在运行到setResult(结果码,意图实例);这样的代码返回来
                //请求码用于判定返回的意图传到哪里,
                startActivityForResult(myin,0);
              
            }
        });

 这样就为我们返回的时候设置了一个请求代码

然后,我们的界面会跳转,当我们在第二个界面代码中运行一个

这样的方法叫做,

setResult(11,send);//前面的11是回传的结果码。后面的是一个携带了资料的意图

这个方法一旦运行,那么代码数据就从当前的页面,

回到第一个界面的,我们刚才说到的那个有三个参数的函数里面

很显然,第二个结果码就有了。

第三个data实际上就是我们现在回传的意图,

然后:我们将视线回到那有三个参数的函数里

经过这一波运行。,

我们的三个参数都集齐了

是吧?什么?忘记了?

再来一遍奥

1. requestcode请求码,在我们第一个界面的意图的开始意图里面设置。

常用的开始是startactivity(意图名字),现在我们用startActivityForResult(意图名字,请求码)

因为这个可以设置一个请求码,实际上因为他是可以返回来的,相当于一个监听也相当于一个中断

2. resultcode结果码。data意图在第二个界面回来的时候

setResult(11,send);

回来了一个结果码,和一个带有信息的意图,

那么我们一直说可以带有信息,到底是怎么让他带有信息的呢,

代码如下

//实例化一个意图,只是用来装数据的一个壳子,并没有其他的东西,
//谁让意图有这个作用呢是吧
Intent send = new Intent();
//放键值对,键用于调用时索引,值用于记录保存数据是被调用的
send.putExtra("key",data_user);


//取出信息的方法,在三个参数的函数里面拿出来
String s = data.getStringExtra("key");//取出信息

介绍到这里,基本的思路就介绍完了,

就是围绕着三个参数的那个函数写的一系列的代码,

能够通过各种方式将三个参数传回这个函数,

并且能够在函数中设置好大量的if  还有什么switch这样判断请求码和结果码的语句,

判断完之后,运行一些东西,可以显示显示东西,显示的东西可以是在第二个界面里面获得的

因为我们把intent传回来了对吧,

那么也就是说第二个界面能够装到intent里面的东西都能穿回来,

并且能给第一个界面调用,

也可以保存到sd卡什么的对吧,恩应该就是这样,下面是具体的代码

有标注,加油

 

 

 

实现代码:

ps: 记住所有的界面都一定要在清单文件里面声明的

Manifast:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.xialm.boke_backdata">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".Second"></activity>
    </application>

</manifest>

 

第一个界面:

java:

package com.example.xialm.boke_backdata;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private Button bbtt;
    private TextView ttvv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建实例
        bbtt = (Button)findViewById(R.id.bu_setting);
        ttvv = (TextView)findViewById(R.id.tv_data);

        //匿名内部类实现按钮点击事件
        bbtt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //实现一个可以跳转界面的实例
                Intent myin = new Intent(MainActivity.this,Second.class);
                //开启意图,并设置请求码是0,相当于设置一个监听或者中断
                //这个中断将在运行到setResult(结果码,意图实例);这样的代码返回来
                //请求码用于判定返回的意图传到哪里,
                startActivityForResult(myin,0);
              
            }
        });
    }

    @Override
    //
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //继承了父类自动生成
        super.onActivityResult(requestCode, resultCode, data);

        //判断请求码是什么,判断结果码是什么,来执行相应代码
        if (requestCode == 0)
        {
            switch (resultCode)
            {
                case 11:
                    //取出键的名字是key的value值
                    String s = data.getStringExtra("key");
                    //将值显示到ttvv也就是上面的tv1里面
                    ttvv.setText(s);
                    break;

                default:
                    break;

            }

        }
    }
}

xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.xialm.boke_backdata.MainActivity">

    <TextView
        android:id="@+id/tv_data"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />


    <Button
        android:id="@+id/bu_setting"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="设置个人资料"
        android:layout_below="@+id/tv_data"
        />
</RelativeLayout>

 

 

第二个界面:

java:

package com.example.xialm.boke_backdata;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

/**
 * Created by xialm on 2019/9/11.
 */
public class Second extends MainActivity {

    private EditText e1,e2,e3,e4;
    private Button b1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);

        e1 = (EditText)findViewById(R.id.et1);
        e2 = (EditText)findViewById(R.id.et2);
        e3 = (EditText)findViewById(R.id.et3);
        e4 = (EditText)findViewById(R.id.et4);
        b1 = (Button)findViewById(R.id.bu_back);

        //给b1设置监听事件
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //取出每一个EditText的输入的值
                String data_user =       "姓名:"+e1.getText().toString()+"\n"
                                        +"个性签名:"+e2.getText().toString()+"\n"
                                        +"生日:"+e3.getText().toString()+"\n"
                                        +"地区:"+e4.getText().toString()+"\n";
                //实例化一个意图,只是用来装数据的一个壳子,并没有其他的东西,
                //谁让意图有这个作用呢是吧
                Intent send = new Intent();
                //放键值对,键用于调用时索引,值用于记录保存数据是被调用的
                send.putExtra("key",data_user);
                //设置结果码是11,和携带回去的意图,到这一句的时候就意味着要触发监听,值已经回去了
                setResult(11,send);
                //用于结束这个activity
                finish();

            }
        });
    }
}

xlm:

<?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/tv0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请输入基本信息:"
        android:textSize="60px"
        android:textColor="@color/abc_background_cache_hint_selector_material_dark"
        />


    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="昵称:"
        android:textSize="50px"

        />
    <EditText
        android:id="@+id/et1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="个性签名:"
        android:textSize="50px"

        />
    <EditText
        android:id="@+id/et2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />

    <TextView
        android:id="@+id/tv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="生日:"
        android:textSize="50px"
        />
    <EditText
        android:id="@+id/et3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />

    <TextView
        android:id="@+id/tv4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="地区:"
        android:textSize="50px"
        />
    <EditText
        android:id="@+id/et4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        />

    <Button
        android:id="@+id/bu_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确认"
        />



</LinearLayout>

 

 

 

总结知识点:

 

1.实例方法

//这样创建实例,可以在全局中使用,而且如果有多个对象的时候,
//可以方便快捷
    private Button bbtt;
    private TextView ttvv;
        //创建实例
        bbtt = (Button)findViewById(R.id.bu_setting);
        ttvv = (TextView)findViewById(R.id.tv_data);

2.开启有请求码的Intent

//实现一个可以跳转界面的实例
Intent myin = new Intent(MainActivity.this,Second.class);
//开启意图,并设置请求码是0,相当于设置一个监听或者中断
//这个中断将在运行到setResult(结果码,意图实例);这样的代码返回来
//请求码用于判定返回的意图传到哪里,
startActivityForResult(myin,0);

3.三个参数的函数,取出值的方法

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        //继承了父类自动生成
        super.onActivityResult(requestCode, resultCode, data);

        //判断请求码是什么,判断结果码是什么,来执行相应代码
        if (requestCode == 0)
        {
            switch (resultCode)
            {
                case 11:
                    //取出键的名字是key的value值
                    String s = data.getStringExtra("key");
                    //将值显示到ttvv也就是上面的tv1里面
                    ttvv.setText(s);
                    break;

                default:
                    break;

            }

        }
    }

4.开启返回上一界面,记得将本界面finsh掉,放入Intent 的方法

//实例化一个意图,只是用来装数据的一个壳子,并没有其他的东西,
//谁让意图有这个作用呢是吧
Intent send = new Intent();
//放键值对,键用于调用时索引,值用于记录保存数据是被调用的
send.putExtra("key",data_user);
//设置结果码是11,和携带回去的意图,到这一句的时候就意味着要触发监听,值已经回去了
setResult(11,send);
//用于结束这个activity
finish();

 

posted on 2019-09-12 00:30  盛世孤舟  阅读(965)  评论(0)    收藏  举报

导航