2016-04-28 8 views
0

Ich setze einen drawrlayout Hintergrund mit Picasso, und schaute auf this Frage und befolgte die Schritte, es funktioniert, aber die seltsame Sache, die passiert ist, dass es nicht tut aktualisieren sie den Hintergrund, wenn die Aktivität zum ersten Mal geöffnet wird (was bedeutet, schließe ich haben, um sie dann wieder öffnen und der Hintergrund erscheint)Einstellung Layout Hintergrund mit Picasso ist nicht aktualisiert den Hintergrund auf den ersten offenen

das ist mein Layout

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 
<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" /> 
<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_store" 
    app:menu="@menu/activity_store_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

EDIT: nach dem Vorschlag und diese ist meine Aktivitätsklasse :

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.MenuItem; 

import com.squareup.picasso.Picasso; 
import com.squareup.picasso.Target; 

public class Store extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_store); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setHomeButtonEnabled(false); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(false); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    final DrawerLayout layout = (DrawerLayout) Store.this.findViewById(R.id.drawer_layout); 
    Target t = new Target() { 
     @Override 
     public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
      final Bitmap p = bitmap; 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        layout.setBackgroundDrawable(new BitmapDrawable(Store.this.getResources(), p)); 
       } 
      }); 
      Log.d("TAG", "Loaded"); 
     } 

     @Override 
     public void onBitmapFailed(final Drawable errorDrawable) { 
      Log.d("TAG", "FAILED"); 
     } 

     @Override 
     public void onPrepareLoad(final Drawable placeHolderDrawable) { 
      Log.d("TAG", "Prepare Load"); 
     } 
    }; 

    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

     return true; 
    } 
} 

Antwort

0
runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     layout.setBackgroundDrawable(new BitmapDrawable(Store.this.getResources(), bitmap)); 
    } 
}); 
+0

sollte ich dies der Aktivitätsklasse oder der Zielklasse hinzufügen? – user1

+0

wo müssen Sie einige Sachen wie Hintergrund set n alle ... –

+0

können Sie mir bitte sagen, ob die Bearbeitung korrekt ist? weil es immer noch das gleiche tut – user1

0

Picasso eine schwache Referenz hält Objekte Target, daher ist es wahrscheinlich, Müll gesammelt werden. Erstellen Sie also eine separate Klasse von Target und legen Sie die Daten fest. Außerdem verwenden Sie ein falsches Layout für den Hintergrundwechsel.

public class Store extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

private DrawerLayout layout; 
private NavigationView navigationView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.toolbar_layout); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setHomeButtonEnabled(false); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(false); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, R.string.app_name, R.string.app_name); 
    drawer.addDrawerListener(toggle); 
    toggle.syncState(); 

    navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
    layout = (DrawerLayout) Store.this.findViewById(R.id.drawer_layout); 

    Picasso.with(this).load("http://a2.mzstatic.com/us/r30/Purple5/v4/58/2e/b9/582eb968-988b-ad42-dee6-92d396cbde5c/icon256.png").into(mTarget); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    return true; 
} 

final Target mTarget = new Target() { 
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { 
     Log.d("DEBUG", "onBitmapLoaded"); 
     BitmapDrawable mBitmapDrawable = new BitmapDrawable(getResources(), bitmap); 
     navigationView.setBackground(mBitmapDrawable); 
    } 

    @Override 
    public void onBitmapFailed(Drawable drawable) { 
     Log.d("DEBUG", "onBitmapFailed"); 
    } 


    @Override 
    public void onPrepareLoad(Drawable drawable) { 
     Log.d("DEBUG", "onPrepareLoad"); 
    } 
}; 
} 
Verwandte Themen