0

프로그래밍 방식으로 TableLayout/ListView을 만드는 방법에 대한 여러 게시물을 읽었으므로 여전히 최선의 경로를 확신 할 수 없습니다.프로그래밍 방식으로 수많은 LIstViews 또는 TableLayouts 만들기

내 마음에는 RunTests.java이라는 클래스가 있습니다. 하나의 테스트 일정에는 수많은 테스트 유형이 포함될 수 있으며 각 테스트 유형마다 결과 테이블이 필요합니다. 그래서 A, B, C, D라는 네 개의 테스트가 있다고 가정 해 보겠습니다.

테스트 A가 완료된 후에 나는 다른 클래스 테스트 열 머리글 및 테스트 행 머리글 배열. 그런 다음 클래스는 결과와 제목을 포함하는 테이블을 반환하고 XML LinearLayout 내에서 보이도록 확장 한 다음 테스트 B로 이동합니다.

그러면 프로세스가 반복되어 다음 테이블이 아래에 표시됩니다. 처음 것, 등등.

어떤 조언이나 예도 좋을 것입니다.

감사 제안 대답에

시도 :이 정의 경우

내가 목록보기에 오류를 받고 있어요, 나는 확실하지 않다. 내가 레이아웃을 기존의 수에 추가 한 XML은 다음과 같습니다 :

private void createTable() { 

     String[] columns = {"row_header", "column_name1", "column_name2"}; 
     String[] results = {"","2000","98"}; 
     int[] to = { R.id.row_header, R.id.txt1 ,R.id.txt2}; 
     String[] rowHeadings = {"","Bandwidth","QoS"}; 

     List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>(); 
     for(int i = 0; i < rowHeadings.length; i++){ 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put(columns[0], rowHeadings[i].toString()); 
      map.put(columns[1], results[1]); 
      map.put(columns[2], results[2]); 
      data .add(map); 
     } 

     SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), data, R.layout.runtests, columns, to);   
     listView.setAdapter(adapter); 
    } 

XML :

<LinearLayout android:id="@+id/resultsLayout" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|top" 
     android:layout_marginEnd="8dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginStart="8dp" 
     android:background="@drawable/curvedbg" 
     android:layout_marginTop="10dp" 
     android:padding="5dp" 
     android:weightSum="99"> 

    <TextView android:id="@+id/row_header" android:layout_weight="33" /> 
    <TextView android:id="@+id/txt1" android:layout_weight="33"/> 
    <TextView android:id="@+id/txt2" android:layout_weight="33"/> 

</LinearLayout> 

답변

0

내 직감 당신이 ListView를 사용해야 하더군요. 다양한 데이터 유형에 대해 Views을 즉시 생성하는 데 적합합니다. 또한 화면에 맞지 않는 다소 큰 결과 목록이있는 경우 ListView은 스크롤을 자동으로 처리하며 화면에 표시되는 데이터 만 메모리에 유지합니다. 당신이 ScrollViewTableLayout을 포장해야하고 메모리에 생성 된 모든 Views을 유지 반면에

는 ... 여부 그들은 화면에 표시됩니다. Views을 생성하여 기본 XML에 첨부하기 위해 많은 보일러 플레이트 코드를 설정해야합니다. 즉, TableLayout은 정적 데이터에 매우 유용합니다.

ListView 접근 방식을 사용하면 SimpleAdapter을 사용해야하는 것처럼 들립니다. 끔찍한 공통점은 아니지만 특정 상황에서만 유용합니다. 솔직히 ListMapAdapter는 ListMapAdapter이어야하며, 데이터를 전달하는 방법은 ListMaps입니다. ArrayAdapter은 가장 혼란스러운 생성자 중 하나이기 때문에 이름을 사용하기가 더 어려울 수 있습니다. 기본적으로 SimpleAdapter은 데이터 열이있는 레이아웃과 같은 표를 렌더링하는 데 적합합니다.

다음은 사용법에 대한 기본적인 예입니다. 이것은 Strings의 데이터를 TextView에 직접 표시하는 데 사용됩니다.데이터에 대한 SimpleAdapter 작품을 더 자세히 의존 여부를 list_layout.xml

<LinearLayout> 
    <TextView android:id="@+id/row_header"/> 
    <TextView android:id="@+id/txt1"/> 
    <TextView android:id="@+id/txt2"/> 
    <TextView android:id="@+id/txt3"/> 
</LinearLayout> 

//Columns is used to assign a column to a TextView. So columns[1] will place all data 
//found in column 1 into to[1]...which is the TextView R.id.txt1. Columns is also used 
//to map which data item belongs to a particular column 
String[] columns = {"row_header", "column_name1", "column_name2", "column_name3"} 
int[] to = { R.id.row_header, R.id.txt1 ,R.id.txt2, R.id.txt3}; 

//This is where you will assemble the test data. Probably the most difficult part 
//as you must convert your test results into a List of Maps. Each index in the 
//List represents a row of data. The Map represents all the columns of data for 
//that row. 
List<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>(); 
for(int i = 0; i < rowHeadings.size(); i++){ 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map.put(columns[0], rowHeadings.get(i)); 
    map.put(columns[1], Your_data_for_column1); 
    map.put(columns[2], Your_data_for_column2); 
    map.put(columns[3], Your_data_for_column3); 
    data .add(map); 
} 

SimpleAdapter adapter = new SimpleAdapter(getContext(), data, R.layout.list_layout, columns, to);   
listView.setAdapter(adapter); 

높은 개요 예. ArrayAdapter, CursorAdapter 등을 사용하는 것이 가능합니다. 모든 것은 데이터 정리 방법에 달려 있습니다. 또한 더 복잡한 방법으로 데이터를 표시해야하는 경우 Strings ... 어댑터의 'getView() ...'을 재정의해야 할 수도 있습니다. 그렇다면 데이터 구성이 가장 잘 맞는 어댑터를 사용해야합니다 당신 것.

+0

고마워요. 제이, 월요일에 다시 돌아가겠습니다. 네가 원하는 걸 얻은 것 같아. 그것은 모두 문자열이 될 것입니다. 이상적으로 배경을 추가하고 행 색상 등을 설정하고 싶습니다. ListView에서 가능한가요? 아니면 TableLayout이 필요합니까? –

+0

글로벌 기준으로 모든 열 또는 모든 행에서 하나의 색을 얻을 수 있습니다 ... 예. list_layout.xml에서 변경을하면됩니다. 그러나 다른 색상을 가진 다른 행이 필요하다면 조정하기 위해 어댑터의'getView()'메소드를 오버라이드해야합니다. –

+0

내가 제안한 변경 사항을 추가했습니다. 개 소식을 업데이트했습니다. 기존 레이아웃 "runtests.xml"을 사용하여 결과를 표시합니다. 이제 XML을 추가했습니다. 선형 레이아웃 대신 listView를 사용합니까? –