【Activity】多个Activity带返回值跳转_startActivityForResult_【场景】选择项利用Activity实现,不用popuwindow的情况

开始CSDN体验之旅,督促一下自己!哼哼...

一般我们做地址选择框,或者自定义时间选择器时,都需要获取到选择的值,然后填充到编辑框里面,这样用户才知道自己选择了什么,同时也可能需要传递给后台。笔者认为可以有常用的三种方式:

1. Popuwindow - 全局变量就可以接收Popuwindow的返回值了;

2. Activity - 利用startActivityForResult进行该选择界面启动,同时利用onActivityResult接收返回值;

3. 还是Activity - 直接全局类,就是所谓的Constant.java类,利用全局变量的set/get方法来获取选择值;

题外:当然,Android传递信息肯定不止这样的一种方式,还有aidl之类的,我们这里的需求就是一个选择弹窗,所以不需要这些传递方式;你可能还会想,不是还有sharepreference吗? 再延伸下还有database.....我们又不是去开发什么登陆功能,登陆后需要记下用户信息或者去开发是否是首次启动这样的功能,所以不会去用这样的方式。

感慨:有时候做东西,光凭知识什么的或许还差点东西,更多需要实践和经验。


正儿八经:下面我们回到Activity这边来,之前我帮朋友一个忙,接了一个私活【利用周末时间弄的,公司事情实在忙不过来】:这个是一个政府项目,是一个提醒精灵,就是给社区用的,有医生提醒,患者家属提醒,巡查提醒等,类似移动助手,协助社区医生等更好的去为社区服务,说多了.....由于时间紧迫,同时大部分界面都是长得比较像的,所以我就直接复制,基本都是Activity做的,但是后面发现页面有改动,需要增加一些弹窗选择,同时弹窗选择里面还有弹窗选择。

其实最终只有一个目的就是为了获取“张三”这个人的属性id号,然后扔个后台就行。但是无奈后台数据不是那么优雅,同时我接到这个case的时候,没有需求,没有原型,我自己做了一个原型,然后给我哥们,我哥们又重新修改了一遍,然后开始做,然后做完了,发现又需要变动,又改,改呀改,最后又需要这样设计三个选择的方式,哎!我也是醉了,下次打死不接这样的项目。

页面基本都是Activity,所以来回跳转就可以了,这个利用startActivityForResult启动下一个页面,然后onActivityResult接收上一个页面的返回值,当第三个页面选择后,一层层把值传递给第一个页面就行了。

笔者单独做了一个demo,模拟了三个Activity的跳转,直接上代码,比较简单:

MainActivity.java

        

package me.example.activityjump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity 
{
	private static final String TAG = "me.example.activityjump.MainActivity";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	/**
	 * 跳转到第二个页面,接受第二个页面的返回值
	 * @param v
	 */
	public void goNextActivity(View v)
	{
		Intent intent = new Intent(MainActivity.this, NextActivity.class);
		startActivityForResult(intent, 11);
	}
	
	/**
	 * 接受上一个页面的返回值
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);
		
		Log.e(TAG, "requestCode = " + requestCode);
		
		switch (resultCode)
		{
			case 21:
				Toast.makeText(this, data.getExtras().getString("from"), Toast.LENGTH_SHORT).show();
				break;
			case 22:
				Toast.makeText(this, data.getExtras().getString("from"), Toast.LENGTH_SHORT).show();
			default:
				break;
		}
	}
}

NextActivity.java

package me.example.activityjump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Toast;

public class NextActivity extends Activity
{
	private static final String TAG = "me.example.activityjump.NextActivity";

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

	/**
	 * 从第二个页面跳转到第三个页面,或者直接返回第一个个页面+带返回值
	 * @param v
	 */
	public void goThirdActivity(View v)
	{
		///< 关闭自己,直接返回第一个页面
		if (v.getId() == R.id.close)
		{
			setResult(21, new Intent().putExtra("from", "我来自第二个界面!"));
			finish();
		}
		///< 跳转到第三个页面
		else
		{
			Intent intent = new Intent(NextActivity.this, ThirdActivity.class);
			startActivityForResult(intent, 22);
		}
	}

	/**
	 * 接受第三个页面的返回值,并处理返回结果: 返回结果可能会要求直接继续跳转到第三个页面
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		super.onActivityResult(requestCode, resultCode, data);

		Log.e(TAG, "requestCode = " + requestCode);

		/**
		 * 利用resultCode进行分类处理
		 * @attention 如果是调用相机、相册等,需要用requestCode进行区分,而resultCode作为结果是否成功的判断;
		 *  		     这里我们的需求相对不同,可以不用那样做,这个倒没什么,看自己需要;
		 */
		switch (resultCode)
		{
			case 31:
				Toast.makeText(this, data.getExtras().getString("is not from"), Toast.LENGTH_SHORT).show();
				break;
			case 32:
				///< 继续往下传递参数
				setResult(22, new Intent().putExtra("from", data.getExtras().getString("from")));
				finish();
			default:
				break;
		}
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) 
	{
		if (keyCode == KeyEvent.KEYCODE_BACK)
		{
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}


ThirdActivity.java

package me.example.activityjump;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;

public class ThirdActivity extends Activity 
{
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_third);
	}
	
	/**
	 * 直接从第三个页面带返回值跳转到第二个页面
	 * @param v
	 */
	public void goSecondActivity(View v)
	{
		setResult(31, new Intent().putExtra("is not from", "我来自第三个页面!"));
		finish();
	}
	
	/**
	 * 直接从第三个页面跳转到第一个页面
	 * @param v
	 */
	public void goMainActivity(View v)
	{
		setResult(32, new Intent().putExtra("from", "我来自第三个页面,我需要直接到第一个界面!"));
		finish();
	}
	
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) 
	{
		if (keyCode == KeyEvent.KEYCODE_BACK)
		{
			return true;
		}
		return super.onKeyDown(keyCode, event);
	}
}

布局什么的就不用说了,你想怎么来就怎么来,嘿嘿。。。。

其他的解释就不说了,直接看代码,顺便我附上工程下载地址... 【Activity】多个Activity带返回值跳转_startActivityForResult

你可能感兴趣的:(HL_ANDROID)