Ich habe die Frage komplett neu geschrieben, um den Umfang zu unterschreiben.Fragment Flips und Verluste Image
Ich habe zwei Fragmente, die wie eine Karte herumfliegen (links, rechts). Wenn das vordere Fragment verschwindet, zeigt es den Rücken. Sobald die Schaltfläche erneut angeklickt wird, springt sie wieder nach vorne, aber das ImageView auf dem vorderen Fragment ist verschwunden.
Ich habe verschiedene Methoden zum Speichern der Daten des Bilds ausprobiert.
- das Fragment onSaveInstanceState Speicher
Das gibt mir einen Null-Zeiger, so dachte ich, ich etwas konstanteren benötigen einmal erstellt werden.
- So, jetzt spare ich das Bild einmal Picked sdcard
Das würde ich arbeiten dachte, und prüfen Sie einfach den Pfad und packen es, wenn seine nach vorne oder die Aktivität gekippt wird neu erstellt. Hier
ist ein Code
onCreate():
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_postcard_activity);
//UI call
frontImageView = (ImageView) findViewById(R.id.imageView);
Log.d(tag, "onCreate() Instance:" + savedInstanceState);
//fragment start
if (savedInstanceState == null) {
Log.d(tag,"Instance Null");
getFragmentManager()
.beginTransaction()
.add(R.id.postcardFrame, new CardFrontFragment())
.commit();
if(!mShowingBack){
Log.d(tag,"Not showing back");
if(newPath != null && newPath != ""){
Log.d(tag, "entered new path, not empty");
Drawable drawable = Drawable.createFromPath(newPath);
Log.d(tag, "Should be setting saved image.");
frontImageView.setImageDrawable(drawable);
}
}
}
else
{
mShowingBack = (getFragmentManager().getBackStackEntryCount() > 0);
Log.d(tag, "Instance is not Null");
}
Flip-Button klicken Listener
//flip card
final Button cardBackButton = (Button) findViewById(R.id.cardBackButton);
cardBackButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
flipCard();
});
flipCard Methode:
private void flipCard()
{
Log.d(tag2, "Log after flipCard:" + mShowingBack);
if(mShowingBack)
{
//Flip to front
flipFront();
return;
}
// Flip to back
flipBack();
}
stellte ich das Bild onActivityResult von ihrer Fotogalerie
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == RESULT_OK) {
Uri photoUri = intent.getData();
if (photoUri != null) {
try {
ImageView setImage = (ImageView)findViewById(R.id.imageView);
frontImage = MediaStore.Images.Media.getBitmap(this
.getContentResolver(), photoUri);
imageSet = true;
//save image to SD
if(imageSet == true){
Log.d(tag, "Inside Image Set if Statement");
String path = getExternalCacheDir() + "Postcards.png";
if(path != null && path != ""){
Log.d(tag, "Path is:" + path);
File file = new File(path);
newPath = file.getAbsolutePath();
Log.d(tag, "New Path:" + newPath);
if(file.exists()){
Log.d(tag, "File Exists");
Drawable d = Drawable.createFromPath(newPath);
setImage.setImageDrawable(d);
}else{
try{
Log.d(tag,"File didnt exist");
FileOutputStream out = new FileOutputStream(file);
frontImage.compress(Bitmap.CompressFormat.PNG, 90, out);
if(file.exists()){
Log.d(tag, "file exists now");
newPath = file.getAbsolutePath();
Drawable b = Drawable.createFromPath(newPath);
setImage.setImageDrawable(b);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
Dies ist, wie ich das Bild am Zugriff auf und versuche, es auf Neustart, um mein Image zu setzen()
if(imageSet == true){
if(newPath != null && newPath != ""){
ImageView view = (ImageView) findViewById(R.id.imageView);
Drawable drawable = Drawable.createFromPath(newPath);
view.setImageDrawable(drawable);
}
}
Das ist wie der beste Weg scheint in das Bild bekommen und einstellen, aber es wird nicht funktionieren. Was wäre die beste Praxis und wie bekomme ich sie so, wie ich es brauche?
Sehr geschätzt mit jeder Hilfe!
Sollten Sie nicht nach NOT NULL suchen? if (outState! = null). – Tool
Ich habe beides versucht und bekomme immer noch den Null Pointer Error. @Tool – Keeano
Haben Sie versucht, die Zeile if (outState == null) vollständig zu entfernen? – Tool