2012-12-28 1 views
2

XML로 TableLayout을 초기화하고 프로그래밍 방식으로 채워 넣으려고합니다. 다음은 XML, java 및 LogCat 출력입니다.TableLayout을 XML로 초기화하고 프로그래밍 방식으로 채우기 - 안드로이드 (자바)

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> 

로그 캣

내가 원하는 것은 "RANK"인 행 1 표제와 간단한 3 열 테이블
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 

, "PERCENTAGE"와 "SCORE". 나중에 SQLite 데이터베이스에서 가져올 열이 10 개 더 늘어나지 만 나중에 그 행을 처리 할 것입니다.

답변

2

xml 파일이 편집 중입니다.

XML로 TableLayout을 초기화하고 프로그램 방식으로 입력하려고합니다. 다음은 XML, java 및 LogCat 출력입니다.

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"> 


    </TableLayout> 

최고 기록 수준의 내용;

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 = new TextView(this); 
     rank.setText("RANK"); 
     TextView percentage = new TextView(this); 
     percentage.setText("PERCENTAGE"); 
     TextView score = new TextView(this); 
     score.setText("SCORE"); 

     TableRow rowHeader = new TableRow(this); 

     rowHeader.addView(rank); //Line 39 
     rowHeader.addView(percentage); 
     rowHeader.addView(score); 

     Button btn1 = (Button)findViewById(R.id.homeBtn); 

     table.addView(rowHeader); 

     btn1.setOnClickListener(new OnClickListener() { 
      public void onClick(View arg0) { 
       Intent intent = new Intent(Highscores.this, MainMenu.class); 
       startActivity(intent); 
      } 
     }); 
    } 
} 
+0

TableLayout의 addview를 호출하면 예외가 발생합니다. 왜? – ofskyMohsen

+0

보기 및 방법을 추가 하시겠습니까? – nurisezgin

+0

두 개의 텍스트보기를 포함하는 테이블 행을 추가하고 싶습니다 – ofskyMohsen

1

당신은 다음 코드를 필요가 없습니다

TableRow rowHeader = (TableRow)findViewById(R.id.rowHeader); 

rowHeader.addView(rank); //Line 39 
rowHeader.addView(percentage); 
rowHeader.addView(score); 

table.addView(rowHeader, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

그들은 이미 레이아웃에 정의되어 있기 때문에.

1

대답은 당신의 logcat에 있습니다 java.lang의 :

java.lang.RuntimeException가 : 활동 ComponentInfo {com.example.test/com.example.test.Highscores}을 (를) 시작할 수 없습니다. IllegalStateException : 지정된 자식에 이미 부모가 있습니다. 먼저 부모의 부모에 대해 removeView()를 호출해야합니다. 프로그래밍을 채우려는 경우

TextView의 단지 당신의 TableLayout의 모든 자식을 제거하는 코드를 작성하고 그들을 추가의 TableRow 안에 이미있는 ActivityonCreate 그냥 그랬던 것처럼.

행운을 빈다.

관련 문제