Hide footer view in ListView?

前端 未结 13 2084
既然无缘
既然无缘 2020-12-02 06:49

I have a ListView. The data behind it is fetched from the Internet, in sets of 10-30 items whenever the user scrolls all the way to the bottom. In order to indi

相关标签:
13条回答
  • 2020-12-02 06:49

    first I am adding my footer to the listview,like this

    listView.addFooterView(Utils.b);
    

    Then on button click , I remove the view,

    listView.removeFooterView(Utils.b);
    

    I am adding the footer everytime when I am hitting the async,and theus the're no duplicate entry.I could aslo check for the count and so it like this,

    if(listView.getFooterViewsCount() > 0){//if footer is added already do something}
    
    0 讨论(0)
  • 2020-12-02 06:50

    The Droid-Fu library has a class designed for having a loading footer show and hide: ListAdapterWithProgress.

    0 讨论(0)
  • 2020-12-02 06:50

    As @YoniSamlan pointed out, it can be achieved in a simple way. You have to specify

    android:layout_height="wrap_content" 
    

    in the ViewGroup that contains the "Load More" button. Doesn't have to be FrameLayout, see below for a simple -working- example that uses a LinearLayout.

    Both images show a screen that is scrolled all the way to the bottom. First one has a visible footer that wraps around the "load more" button. Second images shows that the footer collapses if you set button's visibility to GONE.

    You can show again the footer (inside some callback) by changing the visibility:

    loadMore.setVisibility(View.VISIBLE);  // set to View.GONE to hide it again
    

    listView with visible footer listView with footer gone

    Perform listView initialization as usual

        // Find View, set empty View if needed
        mListView = (ListView) root.findViewById(R.id.reservations_search_results);
        mListView.setEmptyView(root.findViewById(R.id.search_reservations_list_empty));
    
        // Instantiate footerView using a LayoutInflater and add to listView
        footerView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
                .inflate(R.layout.load_more_footer_view, null, false);
        // additionally, find the "load more button" inside the footer view
        loadMore = footerView.findViewById(R.id.load_more);
        loadMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fetchData();
            }
        });
    
        // add footer view to the list
        mListView.addFooterView(footerView);
    
        // after we're done setting the footerView, we can setAdapter
        adapter = new ReservationsArrayAdapter(getActivity(), R.layout.list_item_reservations_search, reservationsList);
        mListView.setAdapter(adapter);
    

    load_more_footer_view.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
    <Button
        android:id="@+id/load_more"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="9dp"
        android:gravity="center"
        android:layout_gravity="center"
        android:background="@drawable/transparent_white_border"
        android:textColor="@android:color/white"
        android:text="@string/LOAD_MORE"/>
    

    0 讨论(0)
  • 2020-12-02 06:53

    Used

    footer.removeAllViews();
    

    This does not remove footer but flushes children. You again have to repopulate children. Can check by

    footer.getChildCount()<2
    
    0 讨论(0)
  • 2020-12-02 06:54

    It should be a bug of Android.

    You don't need to remove or add footer view dynamically. You just need to create an unspecified height parent Layout (either inflate it from an xml file or create it programatically) and then add your view which you want to hide or show into it.

    And you can set the view, but NOT the parent Layout, to VISIBLE or GONE or something else now. It works for me.

    0 讨论(0)
  • 2020-12-02 06:56

    Works well in my project:

    1.Add footer view first

    mListView.addFooterView(mFooterView); mListView.setAdapter(mAdapter);

    2.Set visibility

    mFooterView.setVisibility(View.GONE); mFooterView.setPadding(0, 0, 0, 0);

    3.Set invisibility

    mFooterView.setVisibility(View.GONE); mFooterView.setPadding(0, -1*mFooterView.getHeight(), 0, 0);

    0 讨论(0)
提交回复
热议问题