Listview页脚不显示

Vys*_*akh 22 android android-listview android-fragments

我已经创建了一个带有延迟加载的动态列表视图.我试图向列表视图显示一个页脚,以便当用户滚动到列表视图的底部时,它将显示"加载更多项目"(作为页脚)并且它将加载更多项目.我已经实现了延迟加载.我已经设置了页脚,但它没有显示在列表视图中.请帮帮我.

包含listview的Tabfragment类:

package com.example.abe;

import java.util.ArrayList;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class Tab1Fragment extends ListFragment {
    ListView lv;
    Activity act = this.getActivity();
    Context ct = this.getActivity();
    XMLGettersSetters data;
    boolean loadingMore = false;
    String abc[] = new String[50];
    static int count = 0;
    final int itemsPerPage = 10;
    static ArrayList<String> myListItems = new ArrayList<String>();
    ArrayList<String> myListItems2;
    ArrayAdapter<String> adapter;
    ArrayAdapter<String> adapter1;

    static int size = 0;
    int position = 0;
    int top = 0;
    static String android_array1[];
    ArrayList<String> myListItems3;

    TabsFragmentActivity t = new TabsFragmentActivity();
    String parsed[] = new String[MainActivity.Sarray1.length];

    @SuppressWarnings("unused")
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        adapter = new ArrayAdapter<String>(getActivity().getBaseContext(),
                android.R.layout.simple_list_item_1, t.myarray);
        ;
        View root = inflater.inflate(R.layout.tab_frag1_layout, container,
                false);
        lv = (ListView) root.findViewById(android.R.id.list);
        lv.setAdapter(adapter);
        getActivity().setTitle("ABE ST count: " + t.stcount + " items");
        parsed = MainActivity.Sarray1;
        for (int j = 0; j < parsed.length; j++) {
            System.out.println("sax" + parsed[j].toString());
        }

        return root;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        View footerView = ((LayoutInflater) this.getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
                R.layout.listfooter, null, false);
        lv.addFooterView(footerView);

        getListView().setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                System.out.println(abc.length);
                System.out.println(count);
                System.out.println("First" + firstVisibleItem);
                System.out.println("Vis" + visibleItemCount);
                position = firstVisibleItem;
                View v = lv.getChildAt(0);
                top = (v == null) ? 0 : v.getTop();
                int lastInScreen = firstVisibleItem + visibleItemCount;
                System.out.println("Last" + lastInScreen);
                System.out.println("Total" + totalItemCount);
                if ((lastInScreen == totalItemCount) && !(loadingMore)) {
                    if (count < size) {
                        try {
                            Thread thread = new Thread(null, loadMoreListItems);
                            thread.start();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }

                    }

                    else if (count != 0) {
                        Toast.makeText(getActivity().getApplicationContext(),
                                "Complete Data", Toast.LENGTH_LONG).show();
                        int lvcnt = lv.getCount();
                        System.out.println("Adapter Count " + " " + lvcnt);
                        System.out.println("Abe adapter count" + " "
                                + adapter.getCount());
                    }
                }
            }
        });
        if (t.check1 == 0) {
            try {
                Thread thread = new Thread(null, loadMoreListItems);
                thread.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private Runnable loadMoreListItems = new Runnable() {
        @Override
        public void run() {
            loadingMore = true;
            t.myarray1 = new ArrayList<String>();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            size = parsed.length;
            for (int i = 0; i < itemsPerPage; i++) {
                if (count < size) {
                    t.myarray1.add(parsed[count].toString());

                    count = count + 1;
                    System.out.println("Count in run " + " " + count);
                } else {
                    break;
                }
            }
            Log.i("a", "b");
            try {
                getActivity().runOnUiThread(returnRes);
            } catch (Exception e) {
                e.printStackTrace();
            }
            Log.i("a", "b");
        }
    };
    private Runnable returnRes = new Runnable() {
        @Override
        public void run() {
            if (t.myarray1 != null && t.myarray1.size() > 0) {
                for (int j = 0; j < t.myarray1.size(); j++) {
                    adapter.add(t.myarray1.get(j));

                    // adapter1.add(myListItems3.get(j));

                }
            }
            // setListAdapter(adapter);
            Log.i("a", "b");
            adapter.notifyDataSetChanged();
            // lv.setSelection(position);
            lv.setSelectionFromTop(position, top);
            Log.i("a", "b");
            getActivity().setTitle(
                    "ABE ST count: " + String.valueOf(adapter.getCount())
                            + " items");
            t.stcount = adapter.getCount();
            loadingMore = false;
            t.check1 = 1;

        }
    };
}
Run Code Online (Sandbox Code Playgroud)

Listfooter xml(使用int tabfragment类):页脚的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="7dip"
android:paddingBottom="7dip"
android:orientation="horizontal"
android:gravity="center">

<LinearLayout 
    android:id="@+id/footer_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center"
    android:layout_gravity="center">

<TextView
    android:id="@+id/footer_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="5dip"
    android:text="Loading"
    android:textSize="14sp"
    android:textStyle="bold" />

</LinearLayout>
</LinearLayout> 
Run Code Online (Sandbox Code Playgroud)

use*_*305 64

实际上,你必须在设置适配器之前将FooterView添加到List ..就像下面..

View root = inflater.inflate(R.layout.tab_frag1_layout, container,
                false);
lv = (ListView) root.findViewById(android.R.id.list);
View footerView = ((LayoutInflater) this.getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
                R.layout.listfooter, null, false);
lv.addFooterView(footerView);
lv.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)


Max*_*org 12

除了接受的答案之外,我想指出一些Android版本希望在设置适配器之前添加页脚,而某些版本似乎并不重要.

我在自己的应用中看到,在版本4.4.4不要紧以何种顺序调用addFooterView和版本4.2.2页脚将不会显示,除非你打电话addFooterView 之前 setAdapter.在调用之前总是应该添加标题,setAdapter但添加页脚似乎不那么严格,但知道不同的版本需要不同的设置是有用的.所以最好只是在调用之前设置标题setAdapter以避免任何奇怪的行为.

  • 设置适配器后添加页脚也不适用于Android 4.3. (2认同)