Android intent传输数据intent通过bundle传输数据

Posted 梨轻巧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android intent传输数据intent通过bundle传输数据相关的知识,希望对你有一定的参考价值。

目录

一 intent传输基本使用(传递零零散散的数据)

 二 intent传输bundle(把零零散散的数据放在bundle对象里传过去)

 三 总结


intent传递对象请点这里

一 intent传输基本使用(传递零零散散的数据)

intent传输示意图如下:把数据从activity1传输到activity2

 案例:把activity1的数据传递给activity2

package com.example.myintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity1 extends AppCompatActivity 

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

    //跳转
    public void jump(View view) 
        Intent intent =  new Intent(this,MainActivity2.class);
        intent.putExtra("name","qing");
        intent.putExtra("age",22);
        startActivity(intent);
    

package com.example.myintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity 

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

        //接收携带过来的数据
        Intent intent = getIntent();
        String name = intent.getStringExtra("name");
        //第2个参数是:如果根据第一个参数拿不到值,就用第2个参数默认值
        int age = intent.getIntExtra("age",0);
        Toast.makeText(this, "name:"+name+" age:"+age, Toast.LENGTH_SHORT).show();
    

效果

 二 intent传输bundle(把零零散散的数据放在bundle对象里传过去)

bundle 传输示意图

package com.example.myintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity3 extends AppCompatActivity 

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

    //点击按钮跳转
    public void startJump(View view) 
        Intent intent = new Intent(this,MainActivity4.class);
        //封装bundle对象,放100个putXXX都可以,因为是打包成1个bundle
        Bundle bundle = new Bundle();
        bundle.putString("name","画尔");
        bundle.putInt("age",12);
        //intent携带我们的bundle对象
        intent.putExtras(bundle);
        startActivity(intent);
    

 拆数据和没放在bundle里是一样的

package com.example.myintent;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity4 extends AppCompatActivity 

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

        Intent intent = getIntent();
        //自动拆开bundle对象,拿到里面的数据
        String name = intent.getStringExtra("name");
        int age = intent.getIntExtra("age",0);
        Toast.makeText(this, "name:"+name+" age:"+age, Toast.LENGTH_SHORT).show();
    

 结果

 三 总结


一 intent传输基本使用(传递零零散散的数据)
    //activity1:传输数据
    Intent intent =  new Intent(this,MainActivity2.class);
        intent.putExtra("name","qing");
        intent.putExtra("age",22);
        startActivity(intent);
        
        //activity2:接收携带过来的数据
        Intent intent = getIntent();
        String name = intent.getStringExtra("name");
        //第2个参数是:如果根据第一个参数拿不到值,就用第2个参数默认值
        int age = intent.getIntExtra("age",0);
        Toast.makeText(this, "name:"+name+" age:"+age, Toast.LENGTH_SHORT).show();
        
二 intent传输bundle(把零零散散的数据放在bundle对象里传过去)
    Intent intent = new Intent(this,MainActivity4.class);
        //封装bundle对象,放100个putXXX都可以,因为是打包成1个bundle
        Bundle bundle = new Bundle();
        bundle.putString("name","画尔");
        bundle.putInt("age",12);
        //intent携带我们的bundle对象
        intent.putExtras(bundle);
        startActivity(intent);
        
       接收数据同 一intent传输基本使用
 

安卓:Intent实现页面跳转传输数据

一、数据的传输

1、登录界面

<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" >
    
        <TextView
           android:id="@+id/top"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:layout_marginTop="68dp"
           android:layout_marginLeft="128dp"
           android:textStyle="bold|italic"
           android:text="欢迎XXX使用此系统"
           />
    
       <TextView
           android:id="@+id/name"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:textColor="#DE5045"
           android:layout_marginTop="328dp"
           android:layout_marginLeft="128dp"
           android:textStyle="bold|italic"
           />
       
       <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="用户名:" 
         android:textColor="#ff00ff"
         android:layout_marginTop="128dp"
         android:layout_marginLeft="128dp"
         />  
        
        <EditText
            android:id="@+id/et"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:hint="请输入用户名"
            android:layout_gravity="right"
            android:textColorHint="#ff00ff"
            android:selectAllOnFocus="true"
            android:inputType="text"
            android:layout_marginTop="120dp"
            android:layout_marginLeft="178dp"
    
            />   
   
    <TextView
        android:id="@+id/tv"
        android:text="密码:" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
         android:textColor="#ff00ff"
        android:layout_marginTop="170dp"
        android:layout_marginLeft="128dp"
        />
    
      <EditText
        android:id="@+id/et1"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:hint="请输入密码"
        android:layout_gravity="right"
        android:textColorHint="#ff00ff"
        android:selectAllOnFocus="true"
        android:inputType="textPassword"
        android:layout_marginTop="160dp"
        android:layout_marginLeft="178dp"
        />
    
    
    
    <Button
        android:id="@+id/bt_ok"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OK" 
        android:layout_marginTop="223dp"
        android:layout_marginLeft="218dp"
        />

    <Button
        android:id="@+id/bt_clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="223dp"
        android:layout_marginLeft="138dp"
        android:text="cancel" />
    
        <ImageView
        android:id="@+id/image"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_marginTop="428dp"
        android:layout_marginLeft="128dp"
        />
    
</RelativeLayout>

测试:

 

 

2、登录界面的Activity:

public class MainActivity extends Activity implements OnClickListener {
    private Button mButtonOK, mButtonCancel;
    private TextView mTextView;
    private EditText mEditText, myEditText;
    private TextView name, username,top;
    private ImageView image=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 调用父类方法,完成系统工作
        super.onCreate(savedInstanceState);
        // 加载界面布局文件
        setContentView(R.layout.activity_main);
        // 获取界面控件
        getViewItem();
        // 设置事件监听
        setLiistenets();
    }

    /**
     * 获取界面控件
     */
    private void getViewItem() {

        name = (TextView) findViewById(R.id.name);
        top = (TextView) findViewById(R.id.top);
        // 根据控件id获取界面上的Button控件
        mButtonOK = (Button) findViewById(R.id.bt_ok);
        // 根据控件id获取界面上的Button控件
        mButtonCancel = (Button) findViewById(R.id.bt_clear);
        // 根据控件id获取界面上的TextView控件
        mTextView = (TextView) findViewById(R.id.tv);
        
        // 根据控件id获取界面上的EditText控件
        mEditText = (EditText) findViewById(R.id.et);
        myEditText = (EditText) findViewById(R.id.et1);

    }

    /**
     * 设置事件监听
     */
    private void setLiistenets() {
        // 给按钮设置点击事件
        mButtonOK.setOnClickListener(this);
        // 给按钮设置点击事件
        mButtonCancel.setOnClickListener(this);
    }

    /**
     * 复写监听器对象的onClick方法,完成点击后的事件处理,参数为被点击的按钮
     */
    @Override
    public void onClick(View v) {
        // 根据按钮控件的id区分不同按钮的点击
        switch (v.getId()) {

        case R.id.bt_clear:
            // 清空界面控件EditText的文本输入内容
            mEditText.setText("");
            myEditText.setText("");
            
            break;
        case R.id.bt_ok:
            EditText et = (EditText)findViewById(R.id.et);
            EditText et1 = (EditText)findViewById(R.id.et1);
            image=(ImageView)findViewById(R.id.image);
            String s1 = et.getText().toString(); 
            String s2 = et1.getText().toString(); 
            if(s1.equals("翟华兵") & s2.equals("654321")) {
                name.setText("登录成功");
                image.setImageResource(R.drawable.i1);
                Intent intent=new Intent(getApplicationContext(),SecondActivity.class);
                intent.putExtra("username", s1);
                startActivity(intent);
            }else {
                 et.setText("");
                 et1.setText("");
                 image.setImageResource(1);
                 name.setText("用户名或密码有误,请重新输入!!");                 
            }
            break;
        }
        
       

    }

    class MyListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }

    }
}

在Activity中对提交和清除按钮设置事件,其中,提交按钮点击后要对输入的用户名和密码进行字符串比较,如果相等则登录成功并将用户名放入到intern对象中。

 

3、设置要跳转的页面

<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" >
    
        <TextView
           android:id="@+id/view_user"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:gravity="center"
           android:layout_marginTop="68dp"
           android:layout_marginLeft="128dp"
           android:textStyle="bold|italic"
           android:text=""
           />           
</RelativeLayout>

此页面需要从另外一个Activity中获取数据

 

4、设置跳转到的页面的Activity:

public class SecondActivity extends Activity {
    private TextView view_user=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        view_user=(TextView) findViewById(R.id.view_user);
        Intent it=getIntent();
        String username=it.getStringExtra("username");
        view_user.setText(username+"欢迎你");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

根据键,获取值,并将获取到的值赋给要跳转到的页面

 

 

5、总结

在layout中要有两个配置文件,同时也要有两个Activity,分别对应登录界面和要跳转的页面,在添加第二个配置文件后要对其进行注册(在AndroidManifest.xml中):

项目结构:

 

 注册第二个配置文件:

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

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
               <activity
            android:name="com.example.edittext.SecondActivity">
        </activity>
    </application>

 

二、数据的返回

1、页面二的Activity:

public class SecondActivity extends Activity {
    private TextView view_user=null;
    private EditText message=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        view_user=(TextView) findViewById(R.id.view_user);
        message=(EditText) findViewById(R.id.message);
        Intent it=getIntent();
        String username=it.getStringExtra("username");
        view_user.setText(username+"欢迎你");
    }
    
    public void back(View v) {
        Intent i=getIntent();
        i.putExtra("msg", message.getText().toString());
        setResult(RESULT_OK,i);
        finish();
    }

    public void user(View v) {
        User user = new User();
        user.setSname("XXXX");
        user.setAddress("河南省XXXX");
        user.setNumber("2017XXXX");
        Bundle bundle1 = new Bundle();
        bundle1.putSerializable("user", user);
        Intent itt1 = new Intent(getApplicationContext(), MainActivity.class);
        itt1.putExtras(bundle1);
        setResult(RESULT_FIRST_USER, itt1);
        finish();

    }
    public void cancel(View v) {
        Intent itt1 = new Intent(getApplicationContext(), MainActivity.class);
        setResult(RESULT_CANCELED, itt1);
        finish();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

返回:获取编辑框的内容

取消:返回上一页,不携带数据

user:显示User对象的内容

在配置文件中需要定义三个按钮,分别调用上面的三个不同功能的方法。

 

2、页面一的Activity:主要是取出页面二的数据并进行显示

protected void onActivityResult(int requestCode,int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==123) {
            if(resultCode==RESULT_OK) {
                msg.setText(data.getStringExtra("msg"));
            }
            if(resultCode==RESULT_FIRST_USER)
            {
                Bundle bundle=data.getExtras();
                User user=(User) bundle.getSerializable("user");
                text.setText("姓名:"+user.getSname()+"学号:"+user.getNumber()+"地址:"+user.getAddress());
            }
            if(resultCode==RESULT_CANCELED)
            {
                
                text.setText("");
            }
        }
    }
    

 

3、测试

页面一:

 

 页面二:

 

 点击返回按钮:

 

 点击User按钮:返回user对象封装的数据

 

以上是关于Android intent传输数据intent通过bundle传输数据的主要内容,如果未能解决你的问题,请参考以下文章

安卓:Intent实现页面跳转传输数据

Android Intent简介

用intent怎么传递long型数据

Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据

阅读《Android 从入门到精通》(33)——Intent 分类

intent传对象为啥要序列化