Android: Was ist Los mit meinem custom Bildansicht inherritance?
Ich nur mit Android angefangen und dachte, es wäre einfach eine neue Klasse erstellen, ein Bild, das ich später bewegen und so weiter, nur das Spiel mit Android grundsätzlich. Gut, es scheint Ihr nicht so leicht wie erwartet. Ich bekomme eine NPE:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
xml-layout
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099cc"
tools:context=".Start">
<!-- The primary full-screen view. This can be replaced with whatever view
is needed to present your content, e.g. VideoView, SurfaceView,
TextureView, etc. -->
<!-- This FrameLayout insets its children based on system windows using
android:fitsSystemWindows. -->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:layout_gravity="center" />
</FrameLayout>
Haupttätigkeit
package com.andreiv.snake;
import com.andreiv.snake.util.Picture;
import com.andreiv.snake.util.SystemUiHider;
import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class Start extends Activity {
ImageView img;
Picture pic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
img = (ImageView)findViewById(R.id.imageView);
pic = new Picture(img.getContext());
pic.drawPic();
setContentView(R.layout.activity_start);
}
}
Bild Klasse
package com.andreiv.snake.util;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import com.andreiv.snake.R;
/**
* Created by andrei on 7/2/2014.
*/
public class Picture extends ImageView{
public Picture(Context context) {
super(context);
}
public Picture(Context context, AttributeSet attrs) {
super(context, attrs);
}
public Picture(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void drawPic() {
setImageResource(R.drawable.pic);
}
}
- Was ist null? --
- Nur um sicher zu gehen: man muss in der Tat eine Ressource, die in Ihrem drawables Verzeichnis namens "pic"?
- Rufen Sie
setContent
bevor Sie versuchen zu finden, anzeigen von id - Marco,sicher, ich habe die resource. Else R. drawable.pic wäre nicht brauchbar. MarsAtomic, du hast Recht, mein Fehler, ich werde versuchen, dass.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste - Sie brauchen, um den Inhalt anzuzeigen, bevor Sie versuchen zu verwenden FindViewById.
Zweitens - Sie brauchen nicht zu nehmen den Kontext, aus die Bild, Sie geben der Tätigkeit selbst (die Tätigkeit erstreckt sich Kontext), in Ihrem Fall auch das ist nicht notwendig, da die Ansicht erhalten den Kontext automatisch, wenn der Rahmen wird Blasen Sie Ihre xml.
Dritte - wenn Sie möchten, dass Ihre in der erweiterten Ansicht werden im aufgeblasenen in der xml ist, musst du es Klasse name im xml - (und nicht die Bildansicht Klasse)