嵌入在ExpandableListActivity中的Listview仅部分显示在屏幕上

时间:2010-12-28 01:55:57

标签: android expandablelistview

我在ListView中使用ExpandableListActivity作为子行,并为其定义了自定义CursorTreeAdapter。我的代码正在按预期填充值和视图,但每个可扩展列表行(ListView中包含可变数量的项目)仅部分显示(仅显示前两个项目)。 / p>

  1. 在调试代码时,我确认正在填充所有子行(ListView)(其中包含10-15行)

  2. 为了进一步确认,我更改了android:stackFromBottom = "true" ListView,这次只为每个可展开的项目行显示了最后2项。

  3. `

    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>
    

    `

    当我第一次遇到它时,这看起来很容易解决,但是在浪费了太多时间后,我求助于大师。也许我错过了一些非常明显的东西,但请指出。 :(

    提前致谢。

1 个答案:

答案 0 :(得分:0)

我能够通过使用覆盖ListView的子类onMeasure()来解决问题。

以下两篇文章非常有助于我指出正确的方向 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及其容器({{1}})。

如果有人可以指出原因,那就太好了 谢谢。