Android intent传输数据intent通过bundle传输数据
Posted 梨轻巧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android intent传输数据intent通过bundle传输数据相关的知识,希望对你有一定的参考价值。
目录
二 intent传输bundle(把零零散散的数据放在bundle对象里传过去)
一 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传输数据的主要内容,如果未能解决你的问题,请参考以下文章
Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据