2012-01-25 4 views
0

각 목록 항목에 대한 가로 LinearLayouts의 세로 LinearLayout을 포함하는 사용자 지정 ListView가 있습니다. 수평 LinearLayout에는 4 개의 버튼이 있습니다. 문제는 ListView를 표시 할 때 4 개의 버튼 중 단 하나만 표시된다는 것입니다.사용자 지정 목록 모든 4 대신 1 개의 자식을 표시하는 행보기

내 빈 수직의 LinearLayout이 있습니다

<?xml version="1.0" encoding="utf-8"?> 
LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="6dip" 
    android:background="@color/all_white" 
    android:orientation="vertical" 
    android:id="@+id/linear_layout" 
    /> 

내 수평의 LinearLayout :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:padding="6dip" 
android:background="@color/all_white"> 
<Button 
    android:id="@+id/ws_1" 
    android:layout_width="175dip" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dip" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip" 
    /> 
<Button 
    android:id="@+id/ws_2" 
    android:layout_width="175dip" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dip" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip" 
    /> 
<Button 
    android:id="@+id/ws_3" 
    android:layout_width="175dip" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dip" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip" 
    /> 
<Button 
    android:id="@+id/ws_4" 
    android:layout_width="175dip" 
    android:layout_height="wrap_content" 
    android:layout_marginRight="8dip" 
    android:paddingTop="10dip" 
    android:paddingBottom="10dip" 
    />  
</LinearLayout> 

및 사용자 정의 BaseAdapter 클래스의 내의 getView : 당신 부풀려을 변경하는

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewGroup viewGroup = null; 
    int numRows = 0; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     viewGroup = (ViewGroup) inflater.inflate(R.layout.linear_layout, null); 
    } else { 
     viewGroup = (ViewGroup) convertView; 
     numRows = viewGroup.getChildCount(); 
    } 
    _keys = (String[]) _workspacesMap.keySet().toArray(new String[_workspacesMap.size()]); 
    List<WorkspaceInfo> workspaces = new ArrayList<WorkspaceInfo>(); 
    try { 
     if (_keys[position] != null) { 
      workspaces = _workspacesMap.get(_keys[position]); 
      Collections.sort(workspaces, new InfoNameComparator()); 
     } 
    } catch (ArrayIndexOutOfBoundsException e) { 
     // 
    } 

    int totalRows = 0; 
    if (workspaces.size() > 0) { 
     totalRows = workspaces.size()/4 + 1; 
     if (totalRows % 4 != 0) { 
      totalRows++; 
     } 
    } 

    if (numRows < totalRows) { 
     for (int i = numRows; i < totalRows; i++) { 
      View view; 
      LayoutInflater inflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = (View) inflater.inflate(R.layout.list_row_multi_ws, null); 
      viewGroup.addView(view, i); 
     } 
    } else if (numRows > totalRows) { 
     for (int i = totalRows; i >= numRows; i--) { 
      viewGroup.removeViewAt(totalRows); 
     } 
    } 

    Iterator<WorkspaceInfo> iterator = workspaces.iterator(); 
    for (int i = 0; i < viewGroup.getChildCount(); i++) { 
     ViewGroup temp = (ViewGroup) viewGroup.getChildAt(i); 
     for (int j = 0; j < temp.getChildCount(); j++) { 
      Button button = (Button) temp.getChildAt(j); 
      if (iterator.hasNext()) { 
       String buttonText = iterator.next().getTitle(); 
       button.setText(buttonText); 
      } else { 
       button.setVisibility(View.GONE); 
      } 
     } 
    } 
    return viewGroup; 
} 
+0

버튼의 가시성을 설정합니다. if (iterator.hasNext()) { String buttonText = iterator.next(). getTitle(); button.setText (buttonText); button.setVisibility (View.VISIBLE); } – benkdev

답변

0

시도 이 방법을 사용하는 방법 :

inflater.inflate(R.layout.linear_layout, parent, false); 

도움이 될 수 있습니다.

+0

두 레이아웃 모두 시도했지만 변경되지 않았습니다. – benkdev