Как я могу автоматически изменить размер списка, чтобы он не прокручивался - PullRequest
8 голосов
/ 17 августа 2010

В настоящее время у меня есть следующий макет

<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>

просмотр списка, который я закомментировал, я попытался сделать это в xml, с высотой, равной wrap_content, fill_parent, в настоящее время я делаю это программно со следующим кодом

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);
        }

это результат

alt text

alt text

так что вы можете видеть на этом изображении, что, поскольку я храню представление списка в линейном макете, чтобы получить вид закругленного угла, оно не просто автоматически растягивается, чтобы вместить весь просмотр списка, есть ли способ получить два элементы просто оборачивают содержимое по вертикали, чтобы без прокрутки без программной установки высоты не было бы прокрутки? ? ?

Полагаю, еще одну вещь, которую я должен упомянуть, это то, что у меня есть весь этот макет в виде прокрутки, потому что я хочу, чтобы этот просмотр списка был крошечным подразделом всего макета, поэтому это будет что-то вроде

-scrollview
-textview
-textview

-linearlayout
-listview

- кнопка

вот более простая схема того, что у меня есть

<?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>

Ответы [ 2 ]

18 голосов
/ 18 августа 2010

ListViews не идут в ScrollViews.

ListView для эффективного отображения ограниченного окна в неограниченном контенте. Если вам нужно «отключить прокрутку» в ListView, чтобы поместить его в ScrollView, вы потеряете все практические причины для использования ListView.

Если вы хотите использовать ListView для отображения большого количества контента или неограниченного контента, но также иметь контент выше и ниже, который прокручивается вместе с ним, добавьте представления верхнего или нижнего колонтитула в ListView, используя addHeaderView или addFooterView. Если содержание списка будет небольшой частью вашего общего макета, как вы описываете, это, вероятно, не лучший подход для вас.

Если у вас есть небольшой, ограниченный набор контента для представления, продолжайте и используйте ScrollView и программно генерируйте дочерние представления для ваших «элементов списка», где это необходимо.

Обычный шаблон, используемый в платформе для смешивания раздутого содержимого XML с программно сгенерированным содержимым, заключается в добавлении представления заполнителя в XML-макет, обычно это LinearLayout или FrameLayout. Используйте findViewById, чтобы найти его во время выполнения и добавить к нему сгенерированные дочерние представления.

Вы даже можете использовать ListAdapter с таким подходом, если он у вас уже есть, просто вызовите content.addView(adapter.getView(position, null, content)) в цикле для всех позиций адаптера (где content - это вид заполнителя, который вы нашли с помощью findViewById) , Обратите внимание, что это практично, только если вы знаете, что в адаптере есть небольшое количество элементов списка!

0 голосов
/ 07 апреля 2015

Добавить пустой элемент в конец списка

Пример:

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);
}
...