2016-07-09 10 views
0

ich das navigationView Layout für meine Navigationsleiste bin mit wie unten dargestellt:Platzieren ein großes Bild in ein Imageview mit picasso

activity_main.xml:

<android.support.design.widget.NavigationView 
      android:id="@+id/navigation_view" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      app:menu="@menu/nav_menu" 
      app:headerLayout="@layout/nav_drawer_header_layout" 
      android:background="@color/colour8"/> 

Wie man dort sehen kann, ist ein Header-Layout angewendet (nav_drawer_header_layout), innerhalb dieses Layouts gibt es eine Bildansicht, die ich versuche, ein großes Bild zu platzieren.

MainActivity.java:

//Initailise the navigation view 
    NavigationView navView =  (NavigationView)findViewById(R.id.navigation_view); 

    //Cast the imageView holder that the large is placed in 
    ImageView header = (ImageView)findViewById(R.id.header_navigation_drawer_header_image); 

//Dimensions 
int imageViewWidth = header.getWidth(); 
int imageViewHeight = header.getHeight();  

     //Scale image into header with picasso 
     Picasso.with(this).load(R.drawable.food) 
          .fit() 
          .centerCrop() 
          .resize(imageViewWidth,imageViewHeight) 
          .into(header); 

Dann habe ich die folgende logcat Fehler:

dRuntime: FATAL EXCEPTION: main 
Process: com.example.nazim.kmapp, PID: 18538 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nazim.kmapp/com.example.nazim.kmapp.MainActivity}: java.lang.IllegalArgumentException: Target must not be null. 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358) 
    at android.app.ActivityThread.access$800(ActivityThread.java:144) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5219) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 
Caused by: java.lang.IllegalArgumentException: Target must not be null. 
    at com.squareup.picasso.RequestCreator.into(RequestCreator.java:618) 
    at com.squareup.picasso.RequestCreator.into(RequestCreator.java:601) 
    at com.example.nazim.kmapp.MainActivity.onCreate(MainActivity.java:216) 
    at android.app.Activity.performCreate(Activity.java:5976) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)  
    at android.app.ActivityThread.access$800(ActivityThread.java:144)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:135)  
    at android.app.ActivityThread.main(ActivityThread.java:5219)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:372)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 

Das Problem mit dem Imageview zu sein scheint, ist null,

Lösung mit Erklärung wird sehr geschätzt .... Vielen Dank für Ihre Hilfe im Voraus !!!!

+0

Arbeitete das Problem aus, aufgebläht die Header-Ansicht mit getLayoutInFlater(), dann Anfügen von Ansicht in der Navigationsansicht als einer der Parameter. – Richi

Antwort

0

löschen app:headerLayout Attribut in Ihrem NavigationView wie:

<android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:menu="@menu/nav_menu" 
     android:background="@color/colour8"/> 

Dann in Activity wie Ihr Kopf Layout aufblasen:

//you can use LinearLayout, RelativeLayout ,FrameLayout etc. which you are using in your header layout 
LinearLayout headerLayout = navigationView.inflateHeaderView(R.layout.nav_drawer_header_layout); 

Jetzt können Sie wie jede View in Ihrem Header Layout erhalten:

ImageView header = (ImageView)headerLayout .findViewById(R.id.header_navigation_drawer_header_image); 

You are getting IllegalArgumentException : Target must not be null which means your ImageView is null. Because it isn't in the Activity 's layout. It's in the NavigationView 's layout.

0

Ersetzen Sie diesen Code mit

//Cast the imageView holder that the large is placed in 
ImageView header = (ImageView)findViewById(R.id.header_navigation_drawer_header_image); 

Diese

//Initailise the navigation view 
NavigationView navView =  (NavigationView)findViewById(R.id.navigation_view); 
//Cast the imageView holder that the large is placed in 
ImageView header = (ImageView) navView.findViewById(R.id.header_navigation_drawer_header_image); 

Dies ist, weil Ihr Bild Blick ins Innere NavView Fragment android ist beabsichtigt Sie Layoutelement in Ihrem Layout zu finden, aber es gibt keine imageView innerhalb es daher gibt es null zurück, so muss sagen, wo die Ansicht mit dieser navView.findViewByID() finden.

+0

Versuchte Ihren Code, aber hat nicht funktioniert, erhalten Sie den gleichen Fehler – Richi

+0

überprüfen Sie bitte, ob die ID (R.id.header_navigation_drawer_header_image) für die Bildansicht korrekt ist/versuchen Sie nach dem Wiederaufbau Ihr Projekt – SaravInfern

+0

immer noch nichts ... – Richi