2010-12-28 2 views
0

Я использую ListView как дочерний ряд в ExpandableListActivity и определил для него пользовательский номер CursorTreeAdapter. Значения и представления заполняются моим кодом так же, как ожидалось, но каждая расширяемая строка списка (с переменным количеством элементов в ней) показывается только частично (отображаются только первые 2 элемента).Listview, встроенный в ExpandableListActivity, отображается только частично на экране

  1. При отладке с помощью кода, я подтвердил, что все дочерние строки (ListView) в настоящее время заполняется должным образом (то есть с 10-15 строк в ней)

  2. Просто, чтобы подтвердить дальше, я изменил android:stackFromBottom = "true" для ListView, на этот раз для каждой расширяемой строки позиции отображались только последние 2 элемента.

`

public class WorkExpandableListAdapter extends CursorTreeAdapter { 

public WorkExpandableListAdapter(Cursor cursor, Context context) { super(cursor, context, true); } 

protected Cursor getChildrenCursor(Cursor groupCursor) { ... return childCursor; } 

@Override 
protected void bindChildView(View view, Context context, Cursor cursor, 
    boolean isLastChild) { 

    if (!noColumnsToDisplay) { 
    int numColumns = workProjection.length + 1; // to skip the _id 
    ArrayList<JXTField> jxtFields = new ArrayList<JXTField>(); 
    for (int i = 1; i < numColumns; i++) { 
    jxtFields.add(new JXTField(workProjection[i - 1], 
     cursor.getString(cursor 
     .getColumnIndex(workProjection[i - 1])))); 
    } 

//OrderAdapter is simply a customized Array adapter which converts name value pairs into //customized 2 line items 

    ArrayAdapter<JXTField> adapter = new OrderAdapter(WorkList.this, 
    R.layout.work_view_row, jxtFields); 
    ((ListView) view.findViewById(R.id.expandable_child_list)) 
    .setAdapter(adapter); 
    } 
} 

@Override 
public View newChildView(Context context, Cursor cursor, boolean isLastChild, ViewGroup parent) { 
    return getLayoutInflater().inflate(R.layout.expandable_child_list,null); } 

@Override 
protected void bindGroupView(View view, Context context, Cursor cursor, boolean isExpanded) { ... } 

@Override 
protected View newGroupView(Context context, Cursor cursor, boolean isExpanded, ViewGroup parent) { 
    return ((TextView) getLayoutInflater().inflate(android.R.layout.simple_expandable_list_item_1, null)); 
} 
} 

`

expandable_child_list.xml

`

<ListView 
    android:id="@+id/expandable_child_listt" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingLeft="20dp"  
    android:layout_weight="2.0"  
    /> 

`

work_view_row.xml`

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:layout_height="fill_parent"> 

    <TextView 
     android:id="@+id/work_view_row_top_text" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
    /> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:id="@+id/work_view_row_bottom_text" 
     android:ellipsize="marquee" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
    /> 

</LinearLayout> 

`

Это выглядело как легкий, чтобы решить, когда я впервые столкнулся с ним, но после того, как тратить слишком много времени на это я прибегаю к гуру. Может быть, мне не хватает чего-то очень очевидного, но, пожалуйста, укажите. :(

Заранее спасибо.

ответ

0

Я был в состоянии решить эту проблему с помощью подклассов ListView который переопределяет onMeasure().

Следующие 2 сообщений были очень полезны, указывая мне в правильном направлении.
1. How do I create a ListView that's not in a ScrollView, or has the ScrollView disabled?
2. Calculate the size of a list view or how to tell it to fully expand

Однако я до сих пор считаю, что это была раздутой работа вокруг, и понятия не имею, почему вид возвращенное newChildView() не позволяет полностью расширять ListView, даже если android:layout_height="fill_parent" установлен для ListView и его контейнера (LinearLayout).

Было бы здорово, если бы кто-нибудь мог указать причину.
Спасибо.

Смежные вопросы