简体   繁体   中英

Listview not show last item properly in scroll view

I am trying to implement listview inside scrollview or nestedscroll view but my list dose not visible last item properly .

please help me. how to visible all item properly

here is my code

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:fillViewport="true"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


            <TextView
                android:id="@+id/electronic_TV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:text="@string/no_data_find"
                android:textSize="40dp"
                android:textStyle="bold"
                android:visibility="gone" />

            <RelativeLayout
                android:id="@+id/rltop"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="10dp"
                android:background="@color/white">

                <TextView
                    android:id="@+id/tvadver"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="ADVERTISEMENT"
                    android:textColor="@color/light_grey"
                    android:textSize="12dp"
                    android:textStyle="normal" />

                <RelativeLayout
                    android:id="@+id/rl_viewfliper"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/tvadver"
                    android:layout_marginBottom="10dp"
                    android:layout_marginLeft="1dp"
                    android:layout_marginRight="10dp">

                    <ViewFlipper
                        android:id="@+id/view_flipper"
                        android:layout_width="fill_parent"
                        android:layout_height="130dp">

                    </ViewFlipper>
                </RelativeLayout>
            </RelativeLayout>

            <ListView
                android:id="@+id/fashionLV"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/tvmsg"
                android:layout_weight="1"
                android:divider="@android:color/transparent"></ListView>


        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</LinearLayout>

Java code

 commanAdapter = new CommanAdapter(getActivity(), commanModelArrayList);
                            fashionLV.setAdapter(commanAdapter);
                            GeneralFunction.setListViewHeightBasedOnChildren(fashionLV);

GeneralFunction code:

public static void setListViewHeightBasedOnChildren(ListView listView) {
        ArrayAdapter listAdapter = (ArrayAdapter) listView.getAdapter();
        if (listAdapter == null) {
            // pre-condition
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }

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

    }

The use of "ListView" and "ScrollView" objects together is not recommended.

You should use different views in same adapter. For example;

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View rowView = convertView;
        MyListItem currentItem = myList.get(position);
        LayoutInflater Inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (currentItem.getListItemType() == "Description") { 
                rowView = Inflater.inflate(R.layout.descriptionlayout, null);
                TextView tvDesc= (TextView) rowView.findViewById(R.id.tvAccountType);
                tvDesc.setText("Desc");
        } else if (currentAccountItem.getListItemType() == "ListItem") {
                rowView = Inflater.inflate(R.layout.list_item_layout, null);
               ...
        }
    }

You should add "ListItemType" property to your list object type. And check this property in getView() method and inflate different layouts. In your case, you can create new layout for your LinearLayout . And insert an object to your list for this row. And set ListItemType. and check this property and inflate this layout on getView() .

Hope it helps.

NestedScrollView内的ListView会产生很多问题, 建议您使用ListView代替RecyclerView ,您必须相应地更改Adapter。

You add your own footer view in your listview by using list view methods.

It will shows after all the elements of listView .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM