Ich bin sehr neu in der Android-Programmierung und experimentiere mit dem Aufbau einer App. In meiner neuen App habe ich den Benutzer eine Taste drücken, die es ermöglicht, eine App auf ihrem Gerät wie "Galerie" auszuwählen, um ein Bild auszuwählen. Dieses Bild wird dann in einem Bildbetrachtungsfenster auf dem Aktivitätsbildschirm angezeigt. Leider, wenn ich mein Telefon wechsle und die Ausrichtung sich ändert, ist das Bild verloren und sie müssen es erneut auswählen.Wie behält man ein Bild während einer Orientierungsänderung in einer Android-Aktivität?
Wie kann ich das Bitmap-Bild speichern und nach der Änderung der Ausrichtung erneut anzeigen lassen?
Hier ist die Code-Funktion, die ich benutze, damit der Benutzer eine Bild-App auswählen, ein Bild auswählen und das Bild im Bildfenster anzeigen kann.
Button buttonLoadImage = (Button)findViewById(R.id.loadimage);
textTargetUri = (TextView)findViewById(R.id.targeturi);
targetImage = (ImageView)findViewById(R.id.targetimage);
buttonLoadImage.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 0);
}});
Im Grunde brauche ich nur in meinem onCreate diese boolean zu setzen und haben es die setzen:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
textTargetUri.setText(targetUri.toString());
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(targetUri));
targetImage.setImageBitmap(bitmap);
}
catch (FileNotFoundException e){
e.printStackTrace();
}
}
}
Die obige Funktion in meinem onCreate als Antwort auf eine Schaltfläche klicken in diesem Code gezeigt initialisiert Bild zurück im Fenster. Es wird auch Text angezeigt, der anzeigt, wo sich das Bild auf dem Gerät befand, aber das ist für mich nicht so wichtig, da das Bild auf dem Bildschirm bleiben kann.
Aber es scheint, die Daten nach der Änderung der Ausrichtung zu löschen? Ich habe keine Ahnung, wie Sie die Daten speichern und wiederherstellen, damit sie in diesem Boolean verwendet werden können. Ich freue mich über jeden Hinweis, Code oder Links, die Sie zur Verfügung stellen können!
UPDATE:
Danke Vishal Vijay und rajahsekar für Ihre schnellen und hilfreiche Antworten. Ich habe sowohl Ihre empfohlene Kodierung als auch Code, den ich aus früheren Untersuchungen gefunden hatte, in der Lage, eine Lösung zu erstellen. Während es jedoch das erste Problem löste, erzeugte es ein anderes, das ich beschreiben werde, nachdem ich den Code gezeigt habe, mit dem ich das ursprüngliche Problem behoben habe.
Ich fand, dass ich 2 Optionen für den Wiederherstellungsabschnitt zur Verfügung hatte.
Entweder ich könnte dies in der onCreate platzieren:
if (savedInstanceState != null) {
//if there is a bundle, use the saved image resource (if one is there)
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
textTargetUri.setText(savedInstanceState.getString("path_to_picture"));R.drawable.camera_button);
}
Die erlaubte mir, sowohl das Bild als auch den Weg, um es auf dem Gerät zu haben, auf meiner Tätigkeit wieder angezeigt werden.
Oder ich könnte dies nach dem onCreate
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
image = savedInstanceState.getParcelable("BitmapImage");
targetImage.setImageBitmap(image);
textTargetUri.setText(savedInstanceState.getString("path_to_picture"));
}
und der Sparfunktion, die ich verwendet wurde
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putParcelable("BitmapImage", bitmap);
savedInstanceState.putString("path_to_picture", picture_location);
}
Um zu klären, wo picture_location kam, wieder in meinem onActivityResult Funktion ich eine Linie hinzugefügt und änderte einen anderen, um die Pfadzeichenfolge
if (resultCode == RESULT_OK){
Uri targetUri = data.getData();
picture_location = targetUri.toString();
textTargetUri.setText(picture_location);
wie Variabel zu speichern les initialisiert vor dem onCreate,
Bitmap image;
Bitmap bitmap;
String picture_location;
Nun, ich weiß, das ist ziemlich lang geworden ist, aber ich hoffe, es wird anderen helfen, die ein ähnliches Problem haben. Was das neue Problem anbelangt, das ich bereits erwähnt habe, wenn ich mein Android-Gerät rotiere, speichert es tatsächlich die Daten und zeigt sie erneut an, so wie ich es versucht habe. Wenn ich jedoch den Bildschirm erneut rotiere, tritt das ursprüngliche Problem auf; Die Daten scheinen verloren zu sein und werden nicht auf dem Bildschirm angezeigt.
Ich hoffe, es gibt eine viel einfachere Lösung, so dass die Funktionen zum Speichern und Wiederherstellen funktionieren, egal wie oft sich die Bildschirmausrichtung ändert?
Danke nochmal Jungs!
verwenden Android Query dafür. – Kishan