2015-02-17 4 views
0

У меня есть следующий макет:полностью отображается ListView в Scrollview

<ScrollView 
      android:id="@+id/scrollview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="@dimen/activity_vertical_margin" 
      android:overScrollMode="never" > 
    <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" > 
     <Button 
        android:id="@+id/btnStart" 
        android:layout_width="match_parent" 
        android:layout_height="@dimen/default_button_height" 
        android:layout_marginLeft="@dimen/activity_horizontal_margin" 
        android:layout_marginRight="@dimen/activity_horizontal_margin" 
        android:background="@drawable/rounded_alpha_button" 
        android:text="@string/no_ora_inizio" 
        android:textColor="@color/labels" 
        android:textSize="@dimen/button_font_size" /> 
     <ListView 
        android:id="@+id/listTargets" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_marginTop="@dimen/activity_vertical_margin" /> 
    </LinearLayout> 
</ScrollView> 

Я не мог изменить структуру и внутри ListView я должен добавить список адаптеров определяется как:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/alpha_white" > 
    <TextView 
     android:id="@+id/text1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginLeft="8dp" 
     android:layout_marginRight="8dp" 
     android:layout_toLeftOf="@+id/counterContainer" 
     android:ellipsize="end" 
     android:gravity="center_vertical" 
     android:textColor="@color/labels" 
     android:textSize="@dimen/label_font_size" /> 
    <LinearLayout 
     android:id="@+id/counterContainer" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="8dp" 
     android:gravity="center_vertical" 
     android:orientation="horizontal" > 
     <Button 
      android:id="@+id/btnSub" 
      android:layout_width="35dp" 
      android:layout_height="35dp" 
      android:background="@drawable/circular_alpha_button" 
      android:gravity="center" 
      android:lineSpacingExtra="6dp" 
      android:text="-" 
      android:textColor="@color/labels" 
      android:textSize="@dimen/label_big_font_size" /> 
     <TextView 
      android:id="@+id/text2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="8dp" 
      android:layout_marginRight="8dp" 
      android:gravity="center" 
      android:text="0" 
      android:textColor="@color/labels" 
      android:textSize="@dimen/label_font_size" /> 
     <Button 
      android:id="@+id/btnAdd" 
      android:layout_width="35dp" 
      android:layout_height="35dp" 
      android:background="@drawable/circular_alpha_button" 
      android:gravity="center" 
      android:lineSpacingExtra="7dp" 
      android:text="+" 
      android:textColor="@color/labels" 
      android:textSize="@dimen/label_big_font_size" /> 
    </LinearLayout> 
</RelativeLayout> 

Проблема в том, что список адаптеров не полностью показан.

Я знаю, что неправильно установить ListView внутри ScrollView, я уже нашел другой поток, где предлагается использовать LinearLayout вместо ListView. Я попытался, но с LinearLayout ui отображается правильно, но я не могу обновить адаптер, notifyDataSetChanged() не обновляет текстовый id/text2, который связан с кнопками btnSub и btnAdd.

Теперь я пытаюсь найти другое решение для использования ListView или другого типа представления.

Я нашел следующий способ, чтобы установить высоту ListView:

public void setListViewHeightBasedOnChildren(ListView listView) { 
    if (mAdapter == null) 
     return; 

    int totalHeight = 0;//it is the ListView Height 
    for (int i = 0, len = mAdapter.getCount(); i < len; i++) { 
     View listItem = mAdapter.getView(i, null, listView); 
     listItem.measure(0, 0); 
     int list_child_item_height = listItem.getMeasuredHeight()+listView.getDividerHeight();//item height 
     totalHeight += list_child_item_height; // 
    } 

    ViewGroup.LayoutParams params = listTargets.getLayoutParams(); 
    params.height = (totalHeight + (listTargets.getDividerHeight() * (listTargets.getCount() - 1))); 
    listTargets.setLayoutParams(params); 
    listTargets.requestLayout(); 

} 

, но и с помощью этого метода высота ListView не установлена, как я хочу.

Мне нужно, чтобы список адаптеров (высота каждого адаптера может отличаться каждый раз) полностью отображался без дополнительной прокручиваемой панели.

У вас есть идея?

С уважением

ответ

0

читать этот список link

Вид

myList = (ListView) findViewById(R.id.listView); 
       myList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listview_array)); 
       Helper.getListViewSize(myList); 

Helper Класс

public class Helper { 
    public static void getListViewSize(ListView myListView) { 
     ListAdapter myListAdapter = myListView.getAdapter(); 
     if (myListAdapter == null) { 
      //do nothing return null 
      return; 
     } 
     //set listAdapter in loop for getting final size 
     int totalHeight = 0; 
     for (int size = 0; size < myListAdapter.getCount(); size++) { 
      View listItem = myListAdapter.getView(size, null, myListView); 
      listItem.measure(0, 0); 
      totalHeight += listItem.getMeasuredHeight(); 
     } 
     //setting listview item in adapter 
     ViewGroup.LayoutParams params = myListView.getLayoutParams(); 
     params.height = totalHeight + (myListView.getDividerHeight() * (myListAdapter.getCount() - 1)); 
     myListView.setLayoutParams(params); 
     // print height of adapter on log 
     Log.i("height of listItem:", String.valueOf(totalHeight)); 
    } 
} 
+0

как я уже писал, не работает для меня – user2672950