如何防止选择照片后清除EditText

How to prevent EditText from being cleared after choosing a photo

我创建了一个功能,允许人们从他们的图库中选择图像。虽然该功能有效,但我意识到在选择图像后,activity 中的编辑文本被清除。有没有办法防止文本被清除?已经尝试过 onSaveInstanceState 但它没有用。

这些是选择照片的代码片段

@Override
protected void onResume() {
    super.onResume();
}

private void selectPhoto() {
        if (getIntent().getExtras()!= null && getIntent().getExtras().getBoolean("SelectImage")) {
            Intent intent = new Intent();
            intent.setType("image/*");
            //intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK) {
            if (data != null && data.getClipData() != null) {
                int totalItems = data.getClipData().getItemCount();

                for (int i = 0; i < totalItems; i++) {
                    Uri imageUri = data.getClipData().getItemAt(i).getUri();
                    imageNameList.add(imageUri);

                }
            } else if (data != null && data.getData() != null) {
                Uri imageUri = data.getData();
                imageNameList.add(imageUri);
            }
        }
    }

Activity

的图片

将此行添加到 manifest.xml 中的 activity:

android:launchMode=”singleTop” 

因此,您的清单应如下所示:

<manifest 
xmlns:android="http://schemas.android.com/apk/res/android"  
package="com.package.example"  
android:versionCode="1"  
android:versionName="1.0" >  

<application  
    android:icon="@drawable/ic_launcher"  
    android:label="@string/app_name"  
    android:theme="@style/AppTheme" >  
    <!-- This is the activity for which you want this behaviour-->
    <activity  
        android:name=".MainActivity"  
        android:label="@string/title_activity_main" 
        android:launchMode=”singleTop”>
    </activity>  
</application>  

尝试使用静态变量保存输入文本,如果变量不为空,则尝试将 EDitText 的文本设置为静态变量。

... private String savedEditTextText = ""; ... @Override public void onCreate(SavedInstanceState savedInstanceState) { ... if (!savedEditTextText.isEmpty()) mEditText.setText(savedTextViewText); ... }

通过使用 sharedPreferences 并更改我的 onPause() 和 onResume() 方法并在我的 onCreate() 方法中添加一行,已设法让它工作。

在我的 activity class 中初始化了一个附加字段:

SharedPreferences pref;

为 onCreate() 添加的行:

pref = getSharedPreferences("myPref", MODE_PRIVATE);

我的 onResume() 和 onPause() 方法。使其通用,以便其他人可以参考

@Override
protected void onResume() {
    super.onResume();
    if (pref.getString("KEY_OF_STRING", "") != null) {
        YOUR_EDIT_TEXT.setText(pref.getString("KEY_OF_STRING", ""));
    }
}

@Override
protected void onPause() {
    super.onPause();
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("KEY_OF_STRING", "STRING_TO_STORE");
        editor.apply();
}