22

遅延読み込みを使用して動的リストビューを作成しました。リストビューにフッターを表示しようとしています。これにより、ユーザーがリストビューの一番下までスクロールすると、「より多くのアイテムを読み込んでいます」と表示され、より多くのアイテムが読み込まれます。遅延読み込みを実装しました。フッターを設定しましたが、リストビューに表示されません。私を助けてください。

リストビューを含む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;

        }
    };
}

Listfooter xml(Used int tabfragment class):フッターの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> 
4

2 に答える 2

65

実際には、Adapter を設定する前に、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);
于 2013-01-28T10:37:34.850 に答える