`
yelinsen05
  • 浏览: 497188 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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;
	}
分享到:
评论

相关推荐

    Android中ListView多个Edittext获取输入内容.rar

    然而,当ListView的每个Item中包含多个EditText时,获取用户在这些EditText中输入的内容可能会变得复杂。本资源"Android中ListView多个Edittext获取输入内容.rar"显然是为了帮助开发者解决这个问题。 首先,我们来...

    Android开发中动态获取RecyclerView的Item中EditText的内容

    我们在实际开发中,可能会遇到要在列表里面放入一个EditText,但是我们在列表所在的界面获取不到这个EditText的值,所以,这里我们在Adapter里面为EditText添加一个addTextChangedListener,并实现TextWatcher接口来...

    android edittext不弹出软键盘三种方法

    android edittext不弹出软键盘三种方法“: 方法一: 在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden 例如: <activity android:name=".Main" android:...

    android 前面部分可以编辑后面部分不可编辑的EditText Demo.zip

    在Android开发中,EditText是用于用户输入文本的基本控件,通常在登录、注册或任何需要用户交互的场景中使用。然而,有时我们可能需要创建一个特殊的EditText,其中一部分文本是可编辑的,而另一部分是不可编辑的。...

    android EditText跟随键盘弹出,背景不会被顶上去

    在Android开发中,`EditText` 是一个常用的组件,用于接收用户输入文本。然而,当`EditText`位于屏幕底部,用户点击输入时,软键盘弹出可能会遮挡到`EditText`,给用户带来不便。为了解决这个问题,我们需要实现`...

    android EditText在输入的时候输入框上方现悬浮文字提示

    3. 在代码中操作`EditText`:通过`findViewById()`方法获取`FloatingLabel`对象,并进行设置或监听事件。 除此之外,还可以自定义悬浮文字的颜色、字体大小、动画效果等。这通常通过设置库提供的属性或者直接修改...

    android EditText禁止输入法表情

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的文字。然而,在当前的移动设备环境中,许多用户喜欢使用各种表情符号来增强沟通的趣味性。但有些场景下,例如登录、注册或者数据录入等,我们...

    Android限制只能输入中文的EditText

    在Android开发中,有时我们需要对用户输入进行特定的限制,比如仅允许用户输入中文字符。在这种情况下,我们可以使用EditText控件并对其进行定制,确保输入的内容符合预期。以下是如何实现Android限制只能输入中文的...

    Android 点击EditText编辑框清除hint预设字

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入的文字。`Hint` 是`EditText` 的一个重要属性,它会在输入框内显示提示文字,帮助用户理解应该输入什么内容。当用户开始输入时,这个提示文字...

    自定义生成EditText并获取填写的值

    这个场景中,我们讨论的是如何自定义生成`EditText`并获取用户在其中输入的值。`EditText`是Android UI设计中的一个基本元素,用于接收用户的文本输入。在本案例中,用户点击“+”按钮会动态创建3个`EditText`,而...

    Android EditText 插入表情

    在回调函数中,我们需要获取到`EditText`的引用,并使用`setText()`或`append()`方法将表情字符插入到当前光标位置。同时,确保更新光标的位置,使其跟随在新插入的字符后面。 为了让表情能够正常显示,还需要在`...

    Android-AndroidEditText多行文本输入字数统计限制数量

    在Android开发中,`EditText`组件是用于接收用户输入文本的关键元素。在许多应用场景中,我们可能需要对用户的输入进行一些限制,比如限制输入的字数。本篇将深入探讨如何实现`Android EditText`的多行文本输入字数...

    Android--EditText的富文本组件

    在Android开发中,EditText是用于用户输入文本的基本控件,但有时我们可能需要更复杂的文本编辑功能,如插入图片、格式化文本等,这就是富文本编辑器的角色。本篇文章将详细探讨如何在Android中实现一个基于原生...

    -android搜索历史记录提示,在edittext输入框中输入,会在本地保存,下次输入会自动提示.rar

    在Android开发中,提供搜索历史记录提示功能是一个常见的需求,特别是在需要用户输入查询内容的应用中。这个功能可以提升用户体验,因为它允许用户快速访问他们之前搜索过的条目,而无需重新输入整个查询。本教程将...

    Android EditText 正则表达式 限制数字、字母、字符 输入 密码框

    在Android开发中,`EditText`是用于用户输入文本的基本组件,常常用于收集用户的数据,如密码、邮箱地址等。为了确保用户输入的数据符合特定格式,我们可以利用正则表达式(Regular Expression)进行验证。正则...

    Android中EditText密码样式设置

    在Android开发中,`EditText` 是一个非常重要的组件,它用于接收用户输入的数据。当我们需要创建如登录、注册等涉及密码输入的界面时,通常会用到`EditText`的密码样式功能。本篇文章将深入探讨如何在Android中设置`...

    android-EditText边框颜色

    在Android开发中,`EditText` 是一个非常常用的控件,用于接收用户输入文本。当我们需要对`EditText`的外观进行自定义,特别是调整其边框颜色时,这通常是UI设计需求的一部分,使得应用界面更加美观和个性化。本教程...

    listView中嵌套EditText,动态获取EditText中的值

    然而,当需要在ListView的每一项中嵌套可编辑的输入框EditText时,会遇到一些挑战。本篇文章将详细探讨如何在ListView中嵌套EditText,并动态获取每个EditText中的输入值。 首先,我们创建一个自定义的ListView项...

Global site tag (gtag.js) - Google Analytics