如何防止选择照片后清除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();
}
我创建了一个功能,允许人们从他们的图库中选择图像。虽然该功能有效,但我意识到在选择图像后,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();
}