Initialisieren TableLayout in XML und programmgesteuert ausfüllen - Android (java)
Ich versuche zu initialisieren, ein TableLayout in XML und dann füllen Sie es in programmgesteuert. Hier ist mein XML -, java-und LogCat-Ausgabe.
Highscores.java
public class Highscores extends Activity {
TableLayout table;
TableRow rowHeader, row1, row2, row3, row4, row5, row6, row7, row8, row9, row10;
TextView rank, percentage, score;
Button btn1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.highscoresmain);
TableLayout table = (TableLayout)findViewById(R.id.tableLayout);
TextView rank = (TextView)findViewById(R.id.rank);
rank.setText("RANK");
TextView percentage = (TextView)findViewById(R.id.percentage);
percentage.setText("PERCENTAGE");
TextView score = (TextView)findViewById(R.id.score);
score.setText("SCORE");
TableRow rowHeader = (TableRow)findViewById(R.id.rowHeader);
rowHeader.addView(rank); //Line 39
rowHeader.addView(percentage);
rowHeader.addView(score);
Button btn1 = (Button)findViewById(R.id.homeBtn);
table.addView(rowHeader, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
btn1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent(Highscores.this, MainMenu.class);
startActivity(intent);
}
});
}
}
highscoresmain.xml
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id = "@+id/tableLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:padding="5dp">
<TableRow
android:layout_height="wrap_content"
android:id="@+id/rowHeader">
<TextView
android:id="@+id/rank"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/percentage"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/score"
android:layout_height="wrap_content" />
</TableRow>
</TableLayout>
LogCat
12-19 06:03:36.960: E/AndroidRuntime(20130): FATAL EXCEPTION: main
12-19 06:03:36.960: E/AndroidRuntime(20130): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.Highscores}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread.access$600(ActivityThread.java:130)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.os.Looper.loop(Looper.java:137)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread.main(ActivityThread.java:4745)
12-19 06:03:36.960: E/AndroidRuntime(20130): at java.lang.reflect.Method.invokeNative(Native Method)
12-19 06:03:36.960: E/AndroidRuntime(20130): at java.lang.reflect.Method.invoke(Method.java:511)
12-19 06:03:36.960: E/AndroidRuntime(20130): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-19 06:03:36.960: E/AndroidRuntime(20130): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-19 06:03:36.960: E/AndroidRuntime(20130): at dalvik.system.NativeStart.main(Native Method)
12-19 06:03:36.960: E/AndroidRuntime(20130): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.view.ViewGroup.addViewInner(ViewGroup.java:3378)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.view.ViewGroup.addView(ViewGroup.java:3249)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.view.ViewGroup.addView(ViewGroup.java:3194)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.view.ViewGroup.addView(ViewGroup.java:3170)
12-19 06:03:36.960: E/AndroidRuntime(20130): at com.example.test.Highscores.onCreate(Highscores.java:39)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.Activity.performCreate(Activity.java:5008)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
12-19 06:03:36.960: E/AndroidRuntime(20130): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
12-19 06:03:36.960: E/AndroidRuntime(20130): ... 11 more
Was ich will ist ein einfaches 3-Spalten-Tabelle mit Zeile 1 überschriften als "RANG", "PROZENTSATZ" UND "SCORE". Später werde ich weitere 10 Zeilen, die ich ziehen aus einer SQLite-Datenbank, aber ich werde das angehen danach.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre xml-Datei Bearbeiten;
Ich versuche zu initialisieren, ein TableLayout in XML und dann füllen Sie es in programmgesteuert. Hier ist mein XML -, java-und LogCat-Ausgabe.
highscoresmain.xml
Highscores Klasse Inhalt;
Müssen Sie nicht folgenden code:
table.addView(rowHeader, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
Da Sie bereits im layout festgelegt.
Die Antwort ist in Ihrem
logcat
:Den
TextView
s sind bereits in derTableRow
, wenn Sie möchten füllen Sie es programmgesteuert, entfernen Sie einfach alle die Kinder von IhrenTableLayout
erstellen Sie im code, und fügen Sie Sie in dieActivity
'sonCreate
wie Sie es gerade Tat.Glück!