- Forum-Beiträge: 18
02.04.2015, 21:18:07 via Website
02.04.2015 21:18:07 via Website
Hallo zusammen,
habe mir vor kurzem ein Buch über die Spieleprogrammierung im Android Studio beschaffen. Das Buch ist allerdings knapp 1 jahr alt und wurde mit einer alten Version des Android Studios "benutzt". Mein Problem ist nun folgendes: ich habe ein normales Layout und versuche auf diesem ein Art "container" von 2 TextViews mittels eines Fragments auszugeben. Beim Aufruf folgender Zeile bekomme ich allerdings eine NullPointerException:
tv.setText(text);
Ich habe eben mal ein bisschen gegoogelt -> es muss wohl irgendwas mit der onCreateView Methode auf sich haben, die ich vorher(?) aufrufen muss, damit man weiß, welche TextView ich meine. Oder kann es sein, dass ich durch den Aufruf von c
ontainer.removeAllViews(); die TextView des Layouts wieder entferne?
Kann mir bitte einer weiterhelfen?
Hier ein Auszug aus dem LogCat:
04-02 18:55:03.981 933-933/com.kissthefrog E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.kissthefrog.MyActivity.fillTextView(MyActivity.java:57)
at com.kissthefrog.MyActivity.update(MyActivity.java:63)
at com.kissthefrog.MyActivity.initRound(MyActivity.java:52)
at com.kissthefrog.MyActivity.newGame(MyActivity.java:47)
at com.kissthefrog.MyActivity.startGame(MyActivity.java:79)
at com.kissthefrog.MyActivity.onClick(MyActivity.java:71)
at android.view.View.performClick(View.java:3480)
at android.view.View$PerformClick.run(View.java:13983)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Hier meine Activity:
public class MyActivity extends Activity implements View.OnClickListener {
private int points, countdown, round;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
showStartFragment();
}
private void showStartFragment(){
ViewGroup container = (ViewGroup) findViewById(R.id.container);
container.removeAllViews();
container.addView(getLayoutInflater().inflate(R.layout.fragment_start, null));
container.findViewById(R.id.start).setOnClickListener(this);
}
private void showGameOverFragment(){
ViewGroup container = (ViewGroup) findViewById(R.id.container);
container.addView(getLayoutInflater().inflate(R.layout.fragment_gameover, null));
container.findViewById(R.id.playAgain).setOnClickListener(this);
}
private void newGame() {
points = 0;
round = 1;
initRound();
}
private void initRound() {
countdown = 10;
update();
}
private void fillTextView(int id, String text){
TextView tv = (TextView) findViewById(id);
tv.setText(text);
}
private void update(){
fillTextView(R.id.points, Integer.toString(points));
fillTextView(R.id.round, Integer.toString(round));
fillTextView(R.id.countdown, Integer.toString(countdown*1000));
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.start){
startGame();
}
if(v.getId() == R.id.playAgain){
showStartFragment();
}
}
private void startGame() {
newGame();
}
}
Hier der XML Code des Fragments:
<?xml version="1.0" encoding="utf-8"?>
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:id="@+id/title"
android:layout_gravity="center_horizontal"
android:textSize="48dp"
android:textColor="@color/gameTitle"
android:singleLine="false" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/start_tv_text"
android:id="@+id/start"
android:layout_gravity="center_horizontal" />
Hier der XML Code des Layouts:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/countainer_out">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/container"
android:focusableInTouchMode="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="000000"
android:id="@+id/round"
android:layout_gravity="left|top"
android:textColor="@color/round" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="000000000"
android:id="@+id/points"
android:layout_gravity="right|top"
android:textColor="@color/points"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="000000"
android:id="@+id/countdown"
android:layout_gravity="center_horizontal|bottom"
android:textColor="@color/countdown"
android:singleLine="false" />
</FrameLayout>
— geändert am 02.04.2015, 21:21:45
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.