Android EditText值在intent中获取编辑后切屏会导致编辑信息无法保存的BUG

场景如当我在其他页面获取某个电话号码要跳转到拨号界面在拨号的EditText中显示该号码并编辑!此时编辑过程中出现锁屏解锁是编辑的数据不保存!

原因是我们获取Intent的数据时会在onResume中获取!

锁频后解锁时发出的Intent和之前跳转过来的是同一个!所以编辑数据不会保留会去INTENT中的数据!

解决方案一:

比较方便一点的!

在onPause中把Intent里的数据改变比如

Intent intent = getIntent();
String tel =mEditText.getText().toString();
Log.e("Dean", "onPause mEditText.getText()"+abc);
setIntent(intent.putExtra("tel", abc));

对应的Uri 的取值是一样的不过Uri可能需要重新NEW一个Intent而不是在原来的基础上改!

解决方案二:

GOOLGE源码里的解决方法:

直接贴代码了!

onCreate:
final Intent intent = getIntent();
intent.putExtra(EXTRA_IGNORE_STATE, true);
if (!resolveIntent() && icicle != null) {
            super.onRestoreInstanceState(icicle);
        }
onResume:
Activity parent = getParent();
// See if we were invoked with a DIAL intent. If we were, fill in the
// appropriate digits in the dialer field.
if (parent != null && parent instanceof DialtactsActivity) {
Uri dialUri = ((DialerPhoneActivity) parent).getAndClearDialUri();
if (dialUri != null) {
		resolveIntent();
		}
}

@Override
	protected void onNewIntent(Intent newIntent) {
		Log.i(TAG, "onNewIntent: intent=" + newIntent);
//		setIntent(newIntent);
		resolveIntent();
		setupDialUri(newIntent);
	}

	private void setupDialUri(Intent intent) {
        mDialUri = intent.getData();
    }

	/**
     * Retrieves the uri stored in {@link #setupDialUri(Intent)}. This uri
     * originally came from a dial intent received by this activity. The stored
     * uri will then be cleared after after this method returns.
     *
     * @return The stored uri
     */
    public Uri getAndClearDialUri() {
        Uri dialUri = mDialUri;
        mDialUri = null;
        return dialUri;
    }

	private boolean resolveIntent() {
		boolean ignoreState = false;

		// Find the proper intent
		final Intent intent;
		if (isChild()) {
			intent = getParent().getIntent();
			ignoreState = intent.getBooleanExtra(EXTRA_IGNORE_STATE, false);
		} else {
			intent = getIntent();
		}
		Log.i(TAG, "resolveIntent: intent=" + intent);
		// Resolve the intent
		final String action = intent.getAction();
		if (Intent.ACTION_DIAL.equals(action)
				|| Intent.ACTION_VIEW.equals(action)) {
			// see if we are "adding a call" from the InCallScreen; false by
			// default.
			Uri uri = intent.getData();
			if (uri != null) {
				if ("tel".equals(uri.getScheme())) {
					// Put the requested number into the input area
					String data = uri.getSchemeSpecificPart();
					mDigits.setText(data);
					mDigits.selectAll();
					mDigits.setBackgroundDrawable(mDigitsBackground);
				} else {
//                    String type = intent.getType();
//                    if (People.CONTENT_ITEM_TYPE.equals(type)
//                            || Phones.CONTENT_ITEM_TYPE.equals(type)) {
//                        // Query the phone number
//                        Cursor c = getContentResolver().query(intent.getData(),
//                                new String[] {PhonesColumns.NUMBER}, null, null, null);
//                        if (c != null) {
//                            if (c.moveToFirst()) {
//                                // Put the number into the input area
//                                setFormattedDigits(c.getString(0));
//                            }
//                            c.close();
//                        }
//                    }
				}
			}
		}

		return ignoreState;
	}
时间: 2024-08-03 12:54:10

Android EditText值在intent中获取编辑后切屏会导致编辑信息无法保存的BUG的相关文章

android service-Android 如何在service中获取按键值

问题描述 Android 如何在service中获取按键值 Android 如何在service中获取按键值, 我现在要做这么一个功能,用户通过按实体键盘的键 比如 a键,后台service就能捕获这个键,并做相应的响应.我网上查了一些资料,有的说直接读取设备文件/dev/input/eventX,但是直接读取,提示没有权限,如何操作? 解决方案 .....貌似java中有方法可以直接读取键盘操作,,读取之后抛出去就好了 比如下边的 int score; Scanner sc = new Sca

android asynctask-在list刷新的方法中获取不到itemlist

问题描述 在list刷新的方法中获取不到itemlist { Public void getitems(){ ........... } Public void onfresh() {} } 大致是个这样的结构,需要在getitems里面获得itemlist放到list里面加载,是个上拉加载,下拉刷新的list.如果在getitems里用handler或者异步的话得到的itemlist起有局限性的,在onfresh里面获得不到,没发进行刷新.这种该怎么办啊? 解决方案 http://zhidao

webborwser 中 获取 刷新后的frame 内容

问题描述 在webborwser中嵌套了一个网站,要抓取的数据在网页的frame中,而且数据是分页的.现在调用了分页的js,想抓取第二页的数据内容,但是执行完之后frame中的数据也刷新了,但是获取的数据还是数据第一页的内容,有没有什么办法可以强制webbowser重新加载网页内容.不能进行刷新,刷新的话,又跑到数据第一页去了.另外,发现第一页点击完后,加一个messagebox.show点击一下就能从webbowser中获取到最新的数据. 解决方案 解决方案二:可以直接找到frame里对应的请

Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码_javascript技巧

/** * @author hechen */ var gs = { /**获得屏幕宽度**/ ScreenWidth: function () { return window.screen.width; }, /***获得屏幕高度**/ ScreenHeight: function () { return window.screen.height; }, /**获得浏览器***/ Browse: function () { var browser = {}; var userAgent = n

电脑中经常重启后蓝屏如何解决

  当我们的电脑出现蓝屏的情况时,就需要我们对电脑做出相关的解决方案,首先是重启电脑. 首先点击进入到电脑的开始菜单栏中,然后在下图所示的功能页面打开控制面板,在开始的输入栏中找到输入栏. 在开始菜单中,我们可以在输入栏中输入EventVwr.msc,然后点击回车进入到相关的页面中. 在我们点击回车后会进入到相关的日志表格查看的页面中,这个时候我们就可以查看相关的系统. 而在系统的设置页面中,我们可以看到电脑的系统的相关状况,然后做出调整和修复即可. 如果我们以上方法不能够帮助我们修复电脑的蓝屏

android-安卓中,在一个activity中获取另一个activity中的EditText的值

问题描述 安卓中,在一个activity中获取另一个activity中的EditText的值 在一个activity中获取另一个activity中的EditText的值,两个activity之间没有跳转,有什么方法能做到吗?各位前辈帮帮忙,谢谢. 解决方案 intent传值,Intent putExtra(String name float value) 解决方案二: 安卓中从一个Activity启动另一个Activity开启另一个Activity启动另一个Activity 解决方案三: 使用S

java-在DialogBox数组中获取值

问题描述 在DialogBox数组中获取值 在数组中获取选中项目的值,代码: final String items[] = {""Blue""Green""Orange""};final AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle(""Money Maker"");alert.setI

phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位?

问题描述 phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位? phonegap开发app,通过插件调原生android的手势密码,设置好密码后,如何设置标志位,需要保存一个变量告诉html,下次登录时用手势密码,html的都存储在window.localStorage里,可是原生的java代码不可以访问window.localStorage,如何使两者可以沟通

Android中Intent的获取问题

问题描述 Android中Intent的获取问题 public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidMani