目录

Activity -> Activity

Activity -> Fragment

Fragment -> Activity

Activity -> Service


  • Activity -> Activity

实现小例子:

从MainActivity跳转并传值到Activity2,之后从Activity2再传值回到MainActivity

activity_main的布局:

 <Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="传值"android:textSize="20sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textview_back"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="50dp"android:textSize="20sp"android:text="默认值"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="1.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_send"app:layout_constraintVertical_bias="0.0" />

activity2的布局:

 <TextViewandroid:id="@+id/text_receive"android:layout_width="match_parent"android:layout_height="100dp"android:gravity="center"android:text="默认值"android:textSize="30dp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="1.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.339" /><EditTextandroid:id="@+id/edit_back"android:layout_width="match_parent"android:layout_height="wrap_content"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/text_receive"app:layout_constraintVertical_bias="0.2" /><Buttonandroid:id="@+id/btn_back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="返回值"android:textSize="18sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/edit_back" />

MainActivity代码(写有备注):创建Bundle对象,向其里面加入需要传递的值,注意值的类型,添加完毕之后,由intent将该bundle对象传递即可。

注意一下,如果另一个activity2返回来用的是setResult()函数,那么在MainActivity中传值是需要使用 startActivityForResult函数,如果单纯的使用startActivity函数进行跳转,会导致MainActivity中onActivityResult不会执行。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件Button button = findViewById(R.id.btn_send);textView = findViewById(R.id.textview_back);button.setOnClickListener(this);}//得到传回的数据@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (resultCode) {case 1:Bundle bundle_back=data.getExtras();String str=bundle_back.getString("b");textView.setText(str);break;}}//按钮点击事件@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_send:Bundle bundle = new Bundle();bundle.putString("name","玛丽");bundle.putInt("age",15);Intent intent = new Intent(MainActivity.this,Activity2.class);intent.putExtras(bundle);startActivityForResult(intent,0);break;}}
}

Activity2代码:在获传递过来值的时候我一直获取为空值,感觉很奇怪,之后发现是有两点导致的

1.被传递到的这个Activity中对Intent的操作,不要写成 Intent intent = new Intent();,这样只是会重新在该页面创建了一个新的对象,而需要写成 Intent intent = getIntent();去获取前面传递的值。

2.对于获取需要传回的content的放置位置也很关键,不可以放在onCreate()函数里面获取,这样会导致只会在初始化的时候执行一次,之后写入数据后是不会再执行的,会导致传回去的值一直为空。

public class Activity2 extends Activity implements View.OnClickListener {String name,content;int age;EditText editText;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity2);//获取控件TextView textView = findViewById(R.id.text_receive);editText = findViewById(R.id.edit_back);Button button = findViewById(R.id.btn_back);//接收传来的值并显示Intent intent = getIntent();name = intent.getStringExtra("name");age = intent.getIntExtra("age",-1);textView.setText("名字:"+name+",年龄:"+age);button.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.btn_back://返回值content = editText.getText().toString().trim();Intent intent_back = new Intent(Activity2.this,MainActivity.class);intent_back.putExtra("b",content);setResult(1,intent_back);finish();break;}}
}

执行效果如下:

MainActivity初始页面

点击传值后Activity2的界面,并传递给MainActivity  ok的作为回馈

点击按钮再次来到MainActivity页面,得到ok的反馈
  • Activity -> Fragment

实现小例子:

从Activity跳转并传值到Fragment

activity_main的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><EditTextandroid:id="@+id/edit_input"android:layout_width="match_parent"android:layout_height="60dp"android:layout_margin="10dp"android:hint="输入内容" /><Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="10dp"android:text="发送"android:textSize="30sp" /><LinearLayoutandroid:id="@+id/contentLayout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout></LinearLayout>

fragment_test的布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tvContent"android:layout_width="match_parent"android:layout_height="match_parent"android:text="默认值"android:textSize="25sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity代码(写有备注):注意需要将fragment与activity进行绑定。

public class MainActivity extends AppCompatActivity {private EditText edit_input;private Button btn_send;private String inputContent;private FragmentManager manager;private FragmentTransaction transaction;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件edit_input = findViewById(R.id.edit_input);btn_send = findViewById(R.id.btn_send);//fragment与activity进行绑定manager = getSupportFragmentManager();transaction = manager.beginTransaction();transaction.add(R.id.contentLayout, new FragmentTest());transaction.commit();//按钮点击事件btn_send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {inputContent = edit_input.getText().toString().trim();FragmentTest fragmentTest = new FragmentTest();Bundle bundle = new Bundle();bundle.putString("content", inputContent);fragmentTest.setArguments(bundle);manager = getSupportFragmentManager();transaction = manager.beginTransaction();transaction.replace(R.id.contentLayout, fragmentTest);transaction.commit();}});}
}

在从Activity -> Fragment传值中,困扰了我很久,我使用FragmentManager manager = getFragmentManager(); 再使用(transaction为FragmentTransaction的对象)

transaction.add(R.id.contentLayout, new FragmentTest()); 

该句下方会出现红线。最后成功解决使用的方法是FragmentManager manager =getSupportFragmentManager(); 上方导入的为

import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

具体的原因目前我还是不太了解。

FragmentTest代码:

public class FragmentTest extends Fragment {private TextView tvContent;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_test, null);tvContent = view.findViewById(R.id.tvContent);//获取activity传送过来的值Bundle bundle = getArguments();if (bundle != null) {tvContent.setText(bundle.getString("content"));}return view;}
}

运行结果如图:

点击发送后
  • Fragment -> Activity

activity_main的布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/contents"tools:context=".MainActivity"><TextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="默认值"android:textSize="25sp"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>

fragment_test的布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="发送"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/edit_test"android:layout_width="match_parent"android:layout_height="50dp"android:layout_marginTop="88dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/btn_send" />
</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity代码(写有备注):

public class MainActivity extends Activity implements FragmentTest.CallBackValue {private TextView tv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv1 = (TextView) findViewById(R.id.tv1);//activity与fragment进行绑定FragmentManager manager = getFragmentManager();FragmentTransaction transaction = manager.beginTransaction();transaction.add(R.id.contents, new Fragmen1());transaction.commit();}//传递值@Overridepublic void SendMessageValue(String content) {tv1.setText(content);}
}

FragmentTest代码:

public class FragmentTest extends Fragment{private Button btn1;private EditText et1;CallBackValue callBackValue;//fragment与activity产生关联是回调这个方法@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);callBackValue =(CallBackValue) getActivity();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_layout1, container, false);//获取控件btn1 = (Button) view.findViewById(R.id.btn_send);et1 = (EditText) view.findViewById(R.id.edit_test);//点击事件btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {String content = et1.getText().toString().trim();callBackValue.SendMessageValue(content);}});return view;}//定义一个回调接口public interface CallBackValue{public void SendMessageValue(String content);}
}

运行结果截图:

点击发送按钮后
  • Activity -> Service

activity_main的布局如上。

方法一:使Activity实现implements ServiceConnection ,实现onServiceConnected函数。创ServiceTest.Binder的对象,通过这个对象来实现通信传值。

MainActivity代码(写有备注):

public class MainActivity extends AppCompatActivity implements ServiceConnection {private EditText edit_input;private Button btn_send;private String inputContent;public ServiceTest.Binder binder = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件edit_input = findViewById(R.id.edit_input);btn_send = findViewById(R.id.btn_send);//绑定服务Intent intent = new Intent(MainActivity.this,ServiceTest.class);bindService(intent,this, Context.BIND_AUTO_CREATE);//按钮点击事件btn_send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {inputContent = edit_input.getText().toString().trim();//通过 binder 对象来和 Service 进行通信if(binder != null)binder.sendData(inputContent);}});}@Overridepublic void onServiceConnected(ComponentName componentName, IBinder iBinder) {binder = (ServiceTest.Binder)iBinder;}@Overridepublic void onServiceDisconnected(ComponentName componentName) {}@Overrideprotected void onDestroy() {super.onDestroy();unbindService(this);}
}

ServiceTest代码(写有备注):

public class ServiceTest extends Service {String data;public ServiceTest(){}@Nullable@Overridepublic IBinder onBind(Intent intent) {return new Binder();}public class Binder extends android.os.Binder{public void sendData(String data){ServiceTest.this.data = data;Toast.makeText(ServiceTest.this, "哈哈哈"+data, Toast.LENGTH_SHORT).show();}}
}

运行如下:

点击发送按钮后

方法二:使用Intent,适用于传送少量的数据。

MainActivity代码(写有备注):

public class MainActivity extends AppCompatActivity {private EditText edit_input;private Button btn_send;private String inputContent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取控件edit_input = findViewById(R.id.edit_input);btn_send = findViewById(R.id.btn_send);//绑定服务Intent intent = new Intent(MainActivity.this,ServiceTest.class);//按钮点击事件btn_send.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {inputContent = edit_input.getText().toString().trim();intent.putExtra("test",inputContent);startService(intent);}});}
}

ServiceTest代码(写有备注):

public class ServiceTest extends Service {String data;public ServiceTest(){}@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {//得到Activity传的数据data = intent.getStringExtra("test");Toast.makeText(ServiceTest.this, "传过来的数据"+data, Toast.LENGTH_SHORT).show();return super.onStartCommand(intent, flags, startId);}
}

运行截图:

点击发送后

Android中Activity各种页面跳转并传值(Activity -> Activity)(Activity -> Fragment)(Activity -> Service)相关推荐

  1. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递

    ToolBar中menu无法同时显示图标和文字问题的解决方法 Toolbar添加返回按钮 ToolBar与ActionBar 1.什么是Activity 官方文档是这么说的:Anwhich users ...

  2. 【Android基础】页面跳转与传值(Activity跳转与传值)

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  3. iframe中由一个页面跳转到另一个页面

    1.HTML(父页面中存放iframe) <div ><iframe scrolling="no" id="main" name=" ...

  4. Shiro中Session过期页面跳转回登录页面处理问题

    Session超时的两种情况: shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时: 解决问题的思路:通过定 ...

  5. iOS——使用StroryBoard页面跳转及传值

    之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...

  6. 微信小程序两个页面跳转,传值

    微信小程序两个页面跳转,传值 在小程序界面,需要点击后跳转界面并且传递一个值. 具体实现如下:首先在wxml界面需要绑定事件,绑定需要传的值 a.wxml `<view bindtap=&quo ...

  7. Activity活动页面跳转与Android页面传值

    概述 Android开发少不了的就是页面之间的跳转,或者想要呼叫打开其他应用等 Intent Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的运作,还 ...

  8. Android应用开发:页面跳转和数据传递

    1. Activity的跳转 1.1 创建第二个Activity 需要在清单文件中为其配置一个activity标签 标签中如果带有这个子节点,则会在系统中多创建一个快捷图标 <intent-fi ...

  9. python页面跳转中_python web页面跳转

    接到项目需求.需要搭建一个页面进行交互,慢慢来 b (2).jpg 使用python django框架进行页面的搭建 在项目文件下打开窗口,输入命令; django-admin startprojec ...

最新文章

  1. PyTorch 笔记(07)— Tensor 的归并运算(torch.mean、sum、median、mode、norm、dist、std、var、cumsum、cumprod)
  2. oracle触发器初始化,oracle – 触发器无法初始化变量
  3. Linux之文本处理
  4. TestNG测试框架之测试用例的执行顺序分析
  5. Servlet课程0425(五) sendRedirect实现不同页面共享数据
  6. dubbo源码分析系列(1)扩展机制的实现
  7. [剑指offer]面试题第[36]题[JAVA][二叉搜索树与双向链表][递归]
  8. hyphenation
  9. 使用Gitbook来编写你的Api文档
  10. 自动驾驶1-7: 进入自动驾驶汽车行业的建议Advice for Breaking into the Self-Driving Cars Industry
  11. Python之旅Day14 JQuery部分
  12. MATLAB 图像批处理工具箱(Image Batch Processor)介绍
  13. Android技术分享| 自定义LayoutManager
  14. 吴翰清​(道哥)眼中的机器智能:计算机的再发展
  15. i18n国际语言代码对照表
  16. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java社团管理系统0gl2e
  17. [统计学理论基础] 置信区间
  18. linux命令手册安卓版,linux手册app-linux手册 安卓版v3.0.0-PC6安卓网
  19. 201819102040张辰飞
  20. 阻容感基础05:电容器原理(1)-电容器模型

热门文章

  1. tiptap - 基于 vue 的优雅流畅的开源富文本编辑器
  2. FPGA视觉从入门到放弃——懒人的支持向量机
  3. CAXA2020复制粘贴时卡顿或卡死
  4. java支持wmv的播放器_支持wmv、mpg、mov、avi格式的网页视频播放代码
  5. SU插件情报局 | CleanUp3 清理大师
  6. 截屏工具 HyperSnap
  7. 机器码中的原码,反码,补码计算规则
  8. 个人作业二-软件案例分析
  9. Linux车机平台pulseaudio多alsasink配置
  10. IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解