2016-07-16 13 views
0

Ich erhalte eine NullPointerException, wenn ich versuche, eine clickListener zu ImageView zu setzen.

java.lang.RuntimeException: Unable to start activity ComponentInfo{}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2316) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2376) 
    at android.app.ActivityThread.access$800(ActivityThread.java:147) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5253) 
    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:899) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

activity_list_funny.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent" android:padding="10dp" 
android:paddingLeft="10dp" 
android:paddingRight="10dp"> 
<TextView 
    android:id="@+id/id1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="2dip" 
    android:paddingTop="4dip" 
    android:textStyle="bold" 
    android:textIsSelectable="true" 
    android:textSize="15sp" 
    android:textColor="@android:color/holo_purple"/> 
<TextView 
    android:id="@+id/name1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingBottom="1dip" 
    android:textStyle="bold" 
    android:textIsSelectable="true" 
    android:textSize="20sp" 
    /> 
<ImageView 
    android:id="@+id/imgbtn_favorite1" 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:layout_gravity="end" 
    android:layout_alignBottom="@id/name1" 
    android:src="@drawable/ic_favorite_border_black_24dp" 
    android:contentDescription="@string/add_favr" /> 

</LinearLayout> 

Und hier, als ich Initiieren Image durch ein Objekt in meinem MainActivity machen und es zu einem OnClickListener Bereitstellung Und wenn ich laufe It Kraft schließt und zeigt null Objektreferenzen

MainActivity.java

ArrayList<HashMap<String, String>> quotes; 
ArrayAdapter adapter; 
TextView t1,t2; 
ListView list; 
ImageView i;  
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_funny_quotes); 
    cd = new ConnectionDetector(getApplicationContext()); 
    isInternetPresent = cd.isConnectingToInternet(); 
    c = (CoordinatorLayout) findViewById(R.id.coordinatorLayout1); 

    **i=(ImageView)findViewById(R.id.imgbtn_favorite1);** 

    adapter = new ArrayAdapter<>(this, R.layout.activity_list_funny); 
    i.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

     } 
    }); 

}

+1

Teile hinzufügen (wo man mit imgbtn_favorite1 Image beschäftigen) – W0rmH0le

+1

Bitte fügen der ** relevante ** Java-Code. Und hör auf, das zu schreiben, bitte. – Vucko

+0

@Vucko Aktualisiert. –

Antwort

1

Problem Aufruf ist:

Sie Aktivität wird mit folgenden Aufbau: R.layout.activity_funny_quotes

Aber Ihre Taste ist im Inneren: R.layout.activity_list_funny

Diese Weg, findViewById gibt null undzurück

Wenn nicht

i=(ImageView)findViewById(R.id.imgbtn_favorite1); wird wieder eine gültige ImageView erst, nachdem Sie den Adapter mit Ihrem Listview-Set (list.setAdapter(adapter)) null sein. Auf diese Weise wird die ImageView auf den Bildschirm hinzugefügt werden und findViewById(R.id.imgbtn_favorite1) kann ein gültiges ImageView

Selbst dann zurückkehren, Ihre Liste darf nicht leer sein. Wenn die Liste leer ist, wird kein ImageView auf den Bildschirm zurück und Sie halten null

Es gibt ein weiteres Problem receiveing: Wenn Ihre Liste mehrere Elemente hat, findViewById(R.id.imgbtn_favorite1) nur die ImageView des ersten Elements zurück.

Wie

Fix Es ist schwer zu sagen, wie die richtige Ihr Problem beheben zu.

Sie versuchen, eine clickListener zu einer ImageView hinzuzufügen, die in Ihrem ListView angezeigt wird.

Vielleicht ist es besser, einen ListView.setOnItemClickListener() stattdessen zu definieren eine clickListener zu Ihrem ImageView

+0

Hey Danke jetzt Sein geladen wird aber, wenn ich auf die Src klicken nichts passiert –

+0

Watch my Comment Down @GuilhermeP –

0

prüfen i bevor ein Verfahren

if (i != null) { 
    i.setOnClickListener(...); 
} 
else { 
    Log.d(TAG, "Couldn't find ImageView"); 
} 
+0

Bild wird geladen Nur wenn ich OnClickListener in meiner MainActivity setzen Es Kraft Stop Else seine Fein –

1
ListAdapter adapter = new SimpleAdapter(
       FunnyQuotes.this, quotes, R.layout.activity_list_funny, 
       new String[]{TAG_ID,TAG_NAME,}, 
       new int[]{R.id.id1, R.id.name1} 


     ); 

     list.setAdapter(adapter); 
     i.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       i.setImageResource(R.drawable.ic_favorite_black_24dp); 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

Ihre Aktivitätscode Diese @GuilhermeP