2011-08-10 75 views
1

我有一個佈局,我需要整個滾動。佈局包含一個列表視圖底部,這是造成一些不和諧。這裏發生了什麼: listviewderpListview禁用Android上的內部滾動

所以你可以看到底部卷軸在它自己的小世界中,我需要禁用它,因此它增長並擴展整個滾動佈局。我試過把它封裝在<scrollview><linearlayout>mystuff</linearlayout></scrollview>中,但都無濟於事。我試過無限組合"match_parent""wrap_content"layout_heights。我真的需要該列表視圖向外擴展,而不必將自己置於自己的滾動世界中。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center" 
> 
    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <TableRow> 
      <TableLayout android:layout_span="2" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"> 
       <TableRow android:gravity="center"> 
        <Button android:id="@+id/vin_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_vin_btn" 
         android:textSize="@dimen/inb_txt_sz" /> 
        <Button android:id="@+id/clear_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_sc_btn" 
         android:textSize="@dimen/inb_txt_sz" /> 
        <Button android:id="@+id/transmit_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_tr_btn" 
         android:textSize="@dimen/inb_txt_sz"/> 
       </TableRow> 
      </TableLayout> 
     </TableRow> 
     <TableRow android:gravity="center_vertical" 
      android:layout_width="fill_parent"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_cust" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_cust"/> 
      <Spinner 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:id="@+id/cust_spn"/> 
     </TableRow> 
     <TableRow android:layout_width="fill_parent"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_drv" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_drv"/> 
      <EditText 
       android:id="@+id/drv_in" 
       android:inputType="number" 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:singleLine="true"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_prd" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_prd"/> 
      <Spinner 
       android:id="@+id/prd_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_scale" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_scale"/> 
      <Spinner 
       android:id="@+id/scale_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_dir" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_dir"/> 
      <Spinner 
       android:id="@+id/dir_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_make" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_make"/> 
      <EditText 
       android:id="@+id/make_in" 
       android:singleLine="true" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_tag" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_tag"/> 
      <EditText 
       android:id="@+id/tag_in" 
       android:singleLine="true" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
    </TableLayout> 
    <ListView android:id="@+id/vin_list" 
      android:isScrollContainer="false" 
      android:layout_weight="1" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" /> 
</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="4dip"> 
    <TableLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:gravity="center_vertical|left"> 
     <TableRow> 
      <TextView android:id="@+id/vin" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="20sp"/> 
     </TableRow> 
     <TableRow> 
      <TextView android:id="@+id/desc" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="12sp"/> 
     </TableRow> 
    </TableLayout> 
</LinearLayout> 

回答

0

你可以簡單地把所有的行線性佈局。我假設你已經定義了一個行佈局。你需要做的是循環你的數據,併爲每個項目膨脹一行。列表視圖支持滾動並使用大量的技巧來消耗比一次顯示所有項目更少的資源。

+0

我已經添加了上面的行佈局。如你所見,它已經在LinearLayout中。 – moonlightcheese

5

首先,爲您的佈局添加一個ScrollView作爲根項目,它將允許您在佈局中的所有項目之間滾動(這對於小屏幕手機上的現有TableLayout是必需的)。

然後通過一個垂直的LinearLayout替代ListView和,你需要用類似的方法充氣手動儘可能多行:

LinearLayout llContainer = (LinearLayout) findViewById(R.id.yourBottomLinearLayout); 

LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 

for (Item item : mListItems){   
    LinearLayout llItem = (LinearLayout) inflater.inflate(R.layout.row, null); 
    TextView vin = (TextView) llItem.findViewById(R.id.vin); 
    vin.setText(item.getFirstText()); 
    TextView desc = (TextView) llItem.findViewById(R.id.desc); 
    desc.setText(item.getSecondText()); 
    // To know wich item has been clicked 
    llItem.setTag(item.getId()); 
    // In the onClickListener just get the id using getTag() on the view 
    llItem.setOnClickListener(this); 
    llContainer.addView(llItem); 
} 

需要你的滾動型將增加大小盡可能多的,你將能夠滾動整個屏幕。

+0

那麼......這是非常低效的,因爲每次進行更新時視圖都必須被誇大。這會拋出自定義適配器和convertView窗口,但我看不到沒有建立我自己的ListView類,我不打算做的功能。我真的對android平臺感到失望,再一次,因爲沒有先見之明,並不是所有的listviews都應該是他們自己的可滾動容器。 – moonlightcheese

+0

如果你有很多細胞,肯定效率不高。看看我剛剛發佈的其他方式。 –

+0

我結束了只是實現了一個TextView,我更新每個vin條目,這不如ListView好,但它的工作原理,這很容易。我失去了很多格式化功能,我完全不滿意這一點。這真的是谷歌應該想到的。然而,我標記你的答案是正確的,因爲它更加優雅一點,我的解決方案是sl and不馴的。感謝您的意見。 – moonlightcheese

3

其他更好的答案(它昨日尾盤爲...)

您可以使用一個簡單的ListView和添加頁眉TableLayout:

創建的TableView中特定的佈局。

在onCreate方法:

LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 
View headerView = inflater.(R.layout.header, mListView, false); 
mListView.addHeaderView(headerView); 

使用這種方法,你將有包含由ListView的自動管理表格視圖中的報頭和顯示當用戶滾動到ListView的開頭。

您可以從標準適配器中獲得細胞再利用的好處。