加载ListView

1. activity_main.xml布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/fragment">
</FrameLayout>

2. loading_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"
    android:gravity="center"
    android:orientation="horizontal"
    >
<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginEnd="10dp"
    />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/loading"
        android:textAppearance="?android:attr/textAppearanceMedium"
        />


</LinearLayout>


3. SimpleAdapter.java

package com.idt.os.frameplay;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * Created by jzhou on 2018/5/24.
 */

public class SimpleAdapter extends BaseAdapter
    {
        private int mCount = 20;
        private final LayoutInflater mLayoutInflater;
        private final String mPositionString;
        private final int mTextViewResourceId;

        public SimpleAdapter(Context context,int mTextViewResourceId) {
        this.mTextViewResourceId = mTextViewResourceId;
        mPositionString = context.getString(R.string.position)+" ";
        mLayoutInflater = LayoutInflater.from(context);
    }
    public void addMoreItems(int count){
        mCount += count;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mCount;
    }

    @Override
    public String getItem(int position) {
        return mPositionString+position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final TextView tv;
        if(convertView == null){
            tv = (TextView) mLayoutInflater.inflate(mTextViewResourceId,null);
        }else {
            tv = (TextView) convertView;
        }
        tv.setText(getItem(position));
        return tv;
    }
}

4.AutoLoadingListFragment.java

package com.idt.os.frameplay;

import android.app.ListFragment;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;


/**
 * Created by jzhou on 2018/5/24.
 */

public class AutoloadingListFragment extends ListFragment implements AbsListView.OnScrollListener {
    private final int AUTOLOAD_THRESHOLD = 4;
    private final int MAXIMUM_ITEMS = 52;
    private SimpleAdapter mAdapter;
    private View mFooterView;
    private Handler mHandler;
    private boolean mIsLoading = false;
    private boolean mMoreDataAvailable = true;
    private boolean mWasloading = false;

    private Runnable mAddItemsRunnable = new Runnable() {
        @Override
        public void run() {
            mAdapter.addMoreItems(10);
            mIsLoading = false;
        }
    };

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final Context context = getActivity();
        mHandler = new Handler();
        mAdapter = new SimpleAdapter(context,android.R.layout.simple_list_item_1);
        mFooterView = LayoutInflater.from(context).inflate(R.layout.loading_view,null);
        getListView().addFooterView(mFooterView,null,false);
        setListAdapter(mAdapter);
        getListView().setOnScrollListener(this);

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if(!mIsLoading && mMoreDataAvailable){
            if(totalItemCount >= MAXIMUM_ITEMS){
                mMoreDataAvailable = false;
                getListView().removeFooterView(mFooterView);

            }else if(totalItemCount - AUTOLOAD_THRESHOLD <= firstVisibleItem+visibleItemCount){
                mIsLoading = true;
                mHandler.postDelayed(mAddItemsRunnable,1000);
            }
        }
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }

    @Override
    public void onStart() {
        super.onStart();

        if(mWasloading){
            mWasloading = false;
            mIsLoading = true;
            mHandler.postDelayed(mAddItemsRunnable,1000);
        }

    }

    @Override
    public void onStop() {
        super.onStop();
        mHandler.removeCallbacks(mAddItemsRunnable);
        mWasloading = false;
        mIsLoading = false;

    }
}

5. MainActivity.java

package com.idt.os.frameplay;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragment, new AutoloadingListFragment());
        ft.commit();
    }
}


猜你喜欢

转载自blog.csdn.net/mygod2008ok/article/details/80444970