2010-08-17 28 views
8

hiện tôi đã bố trí sauthế nào tôi có thể listview tự động kích thước để nó không di chuyển

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 

    android:layout_marginTop="9px" 
    android:layout_below="@+id/desc" 
    android:id="@+id/ll_item" 
    android:orientation="vertical" 
    android:paddingRight="3px" 
    android:paddingLeft="3px" 
    android:paddingBottom="5px" 
    android:paddingTop="5px" 
    android:background="@drawable/rounded_corner_lists" > 
<!-- 
     <ListView android:drawSelectorOnTop="false" android:id="@+id/lv" android:layout_height="fill_parent" android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px" android:background="@drawable/white" /> 
    --> 
    </LinearLayout> 

listview mà tôi đã nhận xét ra, tôi đã cố gắng để làm điều này trong xml, với các thiết lập chiều cao để wrap_content, fill_parent, hiện nay tôi đang làm điều này programatically với đoạn mã sau

LinearLayout ll_item = (LinearLayout) this.findViewById(R.id.ll_item); 
     if(list.length() > 0) 
     { 
      ll_item.setVisibility(View.VISIBLE); 
      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,calcListHeight(list)); 

      listview = new ListView(this); 
      listview.setBackgroundResource(R.drawable.white); 
      listview.setDivider(new ColorDrawable(this.getResources().getColor(R.drawable.dividercolor))); 
      listview.setDividerHeight(1); 
      listview.setCacheColorHint(0); 

      mAdapter = new JSONAdapter(list, this); 
      listview.setAdapter(mAdapter); 
      mAdapter.notifyDataSetChanged(); 
      ll_item.addView(listview, lp); 
     } 

đây là kết quả

alt text

alt text

vì vậy bạn có thể thấy trong hình ảnh này, rằng kể từ khi tôi đang chứa listview trong một LinearLayout để có được cái nhìn góc tròn, nó không chỉ tự động kéo dài để chứa toàn bộ listview, là có bất kỳ cách để có hai yếu tố chỉ bọc nội dung theo chiều dọc để không có cuộn mà không có tôi lập trình thiết lập chiều cao? ? ?

tôi đoán một điều khác tôi nên đề cập đến là tôi có tất cả các bố trí này trong một scrollview, bởi vì tôi muốn listview này trở thành một tiểu mục nhỏ của toàn bộ bố trí, vì vậy nó sẽ là một cái gì đó giống như

-scrollview
-textview
-textview

-linearlayout
-listview

- nút

01.235.

đây là một bố cục đơn giản hơn những gì tôi có

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent" 
       android:background="@drawable/bg" xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/titlebar"> 

    <ScrollView android:id="@+id/sv" android:layout_width="fill_parent" android:background="@drawable/bg" 
       android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> 

     <RelativeLayout android:id="@+id/widget28" 
         android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="4dip" 
       > 


      <LinearLayout android:orientation="vertical" style="@style/rounded_corner_full_width_button" 
          android:id="@+id/editfields"> 

       <ListView android:drawSelectorOnTop="false" android:id="@+id/lv" android:layout_height="fill_parent" 
          android:layout_width="wrap_content" android:divider="#ddd" android:dividerHeight="1px" 
          android:background="@drawable/white"/> 

      </LinearLayout> 
     </RelativeLayout> 
    </ScrollView> 
</LinearLayout> 

Trả lời

18

ListViews không đi trong ScrollViews.

ListView là để hiển thị cửa sổ giới hạn thành nội dung không bị chặn hiệu quả. Nếu bạn đã "vô hiệu hóa di chuyển" trên một ListView để đặt nó trong một ScrollView bạn mất tất cả lý do thực tế cho việc sử dụng một ListView ở nơi đầu tiên.

Nếu bạn muốn sử dụng ListView để hiển thị nhiều nội dung hoặc nội dung không bị chặn nhưng cũng có nội dung bên trên và bên dưới cuộn với nội dung đó, hãy thêm chế độ xem đầu trang hoặc chân trang vào ListView sử dụng addHeaderView hoặc addFooterView. Nếu nội dung danh sách sẽ là một phần nhỏ trong bố cục tổng thể của bạn khi bạn mô tả, điều này có lẽ không phải là cách tiếp cận tốt nhất cho bạn.

Nếu bạn có một nhỏ, giáp bộ nội dung đến nay, đi trước và sử dụng một scrollview và lập trình tạo ra quan điểm con cho "mục danh sách" của bạn, nơi thích hợp.

Mẫu chung được sử dụng trong khuôn khổ để trộn nội dung XML được tăng cường với nội dung được tạo theo chương trình là thêm chế độ xem giữ chỗ trong XML bố cục, thường là LinearLayout hoặc FrameLayout. Sử dụng findViewById để xác định vị trí trong thời gian chạy và thêm chế độ xem con được tạo cho nó.

Bạn thậm chí có thể vẫn sử dụng một ListAdapter với phương pháp này nếu bạn đã một văn bản đã có, chỉ cần gọi content.addView(adapter.getView(position, null, content)) trong một vòng lặp cho tất cả các vị trí bộ chuyển đổi (nơi content là quan điểm giữ chỗ bạn nằm với findViewById). Lưu ý rằng điều này chỉ thực tế nếu bạn biết rằng bạn có một số lượng nhỏ các mục danh sách trong bộ điều hợp!

+0

Cảm ơn Adam, tôi đã có một bộ chuyển đổi mà tôi đã có thể tái sử dụng với LinearLayout sử dụng gợi ý của bạn. –

+0

Cảm ơn! Giống như Artem tôi đã có thể sử dụng lại adapter của mình bằng cách sử dụng linearlayout. – hyui

+0

Cảm ơn Adam. Bộ điều hợp của bạn có cần đồng bộ không? Khi tôi thử điều này, nó chỉ lấy được vật phẩm đầu tiên của tôi, giống như bộ nạp của bộ chuyển đổi không được thực hiện. – annie

0

Thêm một mục trống trên danh sách cuối

Ví dụ:

ArrayList<String> options = new ArrayList<String>(); 
String lastItem = ""; 
int lastPosition; 

options.add(lastItem); 

public function addItem() { 
    lastPosition = options.size() - 1; 
    lastItem = options.get(lastPosition); 
    options.remove(lastPosition); 

    //add new items dynamically 
    for (int i = 0; i < 5; i++) 
     options.add("new item: "+i); 

    //add empty item 
    options.add(lastItem); 
} 
Các vấn đề liên quan