Listview not show last item properly in scroll view

764 views Asked by At

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

    }
3

There are 3 answers

0
oyenigun On

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.

0
Srikanth104 On

ListView inside NestedScrollView creates lot of problems and ListView is not recommended to use instead go for RecyclerView, you have to change the Adapter accordingly.

0
Naitik On

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

It will shows after all the elements of listView.