2012-06-08 6 views
0

항목이있는 경우 웹 서비스를 사용하여 목록으로 표시 할 데이터를 가져옵니다. 내 XML 파일에서 2X2 테이블 레이아웃 형식으로있는 네 가지 특성이 있습니다. 그런 다음 Java 코드에서 TableLayout 클래스를 사용하여 각 TableRow에 결과를 저장합니다.android에서 TableLayout을 사용하여 프로그래밍 방식으로 항목 목록을 표시하는 방법

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/tableRow2" 
     style="@style/BodyRow" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 

<TableRow android:id="@+id/tableRow2" 
     style="@style/BodyRow" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

<TextView 
    android:id="@+id/attrib_value2" 
    style="@style/LeftHeaderText" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:text="TextView" 
    android:textColor="@color/textColor" /> 



     <TextView 
      android:id="@+id/attrib_value5" 
      style="@style/HourText" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="TextView" 
      android:textColor="@color/textColor" android:gravity="right"> 
     </TextView> 
    </TableRow> 

<TableRow android:id="@+id/tableRow3" 
     style="@style/BodyRow" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

    <TextView 
      android:id="@+id/attrib_value3" 
      style="@style/BodyText" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="TextView" 
      android:textColor="@color/textColor" > 
     </TextView> 

     <TextView 
      android:id="@+id/attrib_value4" 
      style="@style/BodyText" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:text="TextView" 
      android:textColor="@color/textColor" > 
     </TextView> 


</TableRow> 

</TableLayout> 

가 여기에 tabrow.xml 각 항목을 추가하기 위해 호출되는 내부의 또 다른 XML 코드의 tabrow.xml :

여기 내 XML 코드입니다.

<TableLayout 
      android:id="@+id/resultDetail" 
      android:layout_width="fill_parent" 
      style="@style/BodyRow" 
      android:layout_height="wrap_content" > 
     </TableLayout> 

다음은 자바 코드입니다.

public void fillWorkEntries(ArrayList<WorkEntry> workEntries) { 
    try { 
     TableLayout table = (TableLayout) WorkEntryScreenActivity.this 
       .findViewById(R.id.resultDetail); 

     table.removeAllViews(); 
     for (WorkEntry workEntry : workEntries) { 

      TableLayout nestedtable = (TableLayout) LayoutInflater.from(this).inflate(
        R.layout.tabrow, null); 

      TableRow bodyRow = (TableRow) LayoutInflater.from(this).inflate(
        R.id.tableRow2, null); 



      ((TextView) bodyRow.findViewById(R.id.attrib_value2)) 
        .setText(workEntry.getWorkRequestName()); 


      ((TextView) bodyRow.findViewById(R.id.attrib_value5)) 
        .setText(workEntry.getActHrs()); 


      TableRow bodyRownext = (TableRow) LayoutInflater.from(this).inflate(
        R.id.tableRow3, null); 

      ((TextView) bodyRownext.findViewById(R.id.attrib_value3)) 
        .setText(workEntry.getActivity()); 

      ((TextView) bodyRownext.findViewById(R.id.attrib_value4)) 
        .setText(workEntry.getWorkEntryDesc()); 

      table.addView(nestedtable); 


     } 
     Log.d(TAG, "Load Entries"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e(TAG, e.toString()); 
    } 
} 

그것은 내가 반복적으로 모두 네 개의 항목을 하나씩 가져 오기 위해 호출 내 XML 파일 만 'tablerow을'있을 때 전에 작동하는 데 사용됩니다. 하지만 일부 화면 공간을 절약하기 위해 두 개의 행으로 'tableyalout'을 삽입하려고 시도했지만 작동을 멈췄습니다. 여기서 내가 뭘 잘못하고 있니? 어떤 도움을 주시면 감사하겠습니다.

TableRow bodyRow = (TableRow) LayoutInflater.from(this).inflate(
        R.layout.tabrow, null); 

는 캐스트 예외가 발생합니다 : 당신이 그렇게 줄을 캐스팅으로

+0

당신이 팽창 한 중첩 된 테이블 개체의 일부로서, 당신의 행을 팽창 할 필요가 야해. 팽창하려고하면 어떻게 팽창해야하는지 압니까 ??? – trumpetlicks

+0

inflate.layout을 사용하고 findById 메소드를 사용하지 않았으므로 테이블 행 ID를 제공 할 필요가 없습니다. 나는? 내가 어떻게해도 나는 그들을 사용합니까? – Harsh

+0

Im 정직하게 질문에 대해서는 모르겠지만 제공된 코드의 예에서 "R.layout.tabrow"또는 "R.layout.work_seprater"란 무엇입니까? 그 사람들은 어디에서 왔습니까? – trumpetlicks

답변

1

이 코드를 호기심에서 시험해보십시오.

public void fillWorkEntries(ArrayList<WorkEntry> workEntries) {  
    try {   
     TableLayout table = (TableLayout)WorkEntryScreenActivity.this.findViewById(R.id.resultDetail);   

     //table.removeAllViews(); 
     for (WorkEntry workEntry : workEntries) { 
      TableLayout nestedtable = (TableLayout) LayoutInflater.from(this).inflate(R.layout.tabrow, null); 
      TableRow bodyRow = (TableRow)nestedtablefindViewById(R.id.tableRow2, null); 
      ((TextView) nestedtable.findViewById(R.id.attrib_value2)).setText(workEntry.getWorkRequestName());    
      ((TextView) bodyRow.findViewById(R.id.attrib_value5)).setText(workEntry.getActHrs()); 
      //TableRow bodyRownext = (TableRow) LayoutInflater.from(this).inflate(R.id.tableRow3, null); 
      ((TextView) nestedtable.findViewById(R.id.attrib_value3)).setText(workEntry.getActivity()); 
      ((TextView) nestedtable.findViewById(R.id.attrib_value4)).setText(workEntry.getWorkEntryDesc()); 

      table.addView(nestedtable); 
     } 

     Log.d(TAG, "Load Entries"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     Log.e(TAG, e.toString()); 
    } 
} 

당신은 이미 당신이 당신 XML 파일의 내부에 테이블 행 어떤 ID를 부여 havent 한 것을 볼 수 있습니다

+0

확실합니다. 고마워요! – Harsh

0

부모 레이아웃 R.layout.tabrowViewTableLayout 아닌 TableRow입니다. 대신 다음과 같아야합니다.

TableLayout bodyRow = (TableLayout) LayoutInflater.from(this).inflate(
        R.layout.tabrow, null); 
((TextView) bodyRow.findViewById(R.id.attrib_value2)) 
       .setText(workEntry.getWorkRequestName()); 
((TextView) bodyRow.findViewById(R.id.attrib_value5)) 
       .setText(workEntry.getActHrs()); 
((TextView) bodyRownext.findViewById(R.id.attrib_value3)) 
       .setText(workEntry.getActivity()); 
((TextView) bodyRownext.findViewById(R.id.attrib_value4)) 
       .setText(workEntry.getWorkEntryDesc()); 
TableRow tr = new TableRow(this); 
TableRow.LayoutParams p = new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT); 
bodyRow.setlayoutParams(p); 
tr.addView(bodyRow); 
TableLayout.LayoutParams p1 = new TableTableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); 
tr.setLayoutParams(p1); 
table.addView(tr); 
+0

코드를 보았을 때 코드를 업데이트하는 중이었습니다. 제 자바 코드를 다시 보시기 바랍니다. tabrow 테이블 레이아웃에 두 개의 행이 있습니다. 그리고 다른 xml 파일에 id라는 테이블 레이아웃이 있습니다. resultDetail – Harsh

+2

@Harsh 수정 된 답변보기. 귀하의 코드가 잘못되었습니다, 우선 당신이 왜 레이아웃에서'TableRows'를 사용하려고하는지 모르겠습니다. 두 번째'inflate (R.id.tableRow2, null); '가 잘못되었습니다. inflate 메소드는'R.layout.numa_od_the_file' 유형의 리소스가 필요합니다. – Luksprog

+0

@Luksprog - 정확하게, 그는 본질적으로 팽창을 두 배로하려고 노력하고 있습니다. tableRow 뷰는 부풀린 TabRow의 일부로 제공됩니다 .-) – trumpetlicks

관련 문제