ListView动态加载

来源:互联网 发布:外贸邮箱软件 编辑:程序博客网 时间:2024/06/05 02:24
package app.jiyun.com.android_day03_listview_jiazai;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.ProgressBar;


import com.google.gson.Gson;


import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import app.jiyun.com.android_day03_listview_jiazai.adapter.MyAdapter;
import app.jiyun.com.android_day03_listview_jiazai.bean.MyData;
import app.jiyun.com.android_day03_listview_jiazai.until.MyOkHttp;


/**
 * Created by lvxinxin on 2017/12/20.
 * ListView和RecyclerView动态加载 预先把适配啥的都实例化好 当我数据源发生改变的时候刷新适配器就行
 * 三要素?
 * 1:本身这个组件
 * 2:数据源
 * 3:适配器
 * 下拉刷新用一个组件
 */


public class ListViewDongtaiActivity extends AppCompatActivity implements View.OnClickListener, AbsListView.OnScrollListener {
    private ListView mListView;
    private int mPageIndex = 1;
    private MyAdapter myAdapter;
    private List<MyData.ParamzBean.FeedsBean> mList = new ArrayList<>();
    private View mFootView;
    private Button mLoadMore;
    private ProgressBar mPro;
    private int mLastIndex;
    private SwipeRefreshLayout mSwipe;
    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            String jsonStr = (String) msg.obj;
            Gson gson = new Gson();
            //反射???
            MyData myData = gson.fromJson(jsonStr, MyData.class);
            //给集合赋值
//            mList = myData.getParamz().getFeeds();
//            Log.e("sfds",mList.toString());
            mList.addAll(myData.getParamz().getFeeds());
            myAdapter.notifyDataSetChanged();
            mSwipe.setRefreshing(false);
        }
    };


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initFootView();
        initView();
        getInfo();
        mSwipe.setProgressBackgroundColorSchemeResource(android.R.color.white);
        // 设置下拉进度的主题颜色
        mSwipe.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark);
        mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                mList.clear();
                mPageIndex = 1;
                getInfo();


            }
        });




    }


    private void initView() {
        mSwipe = (SwipeRefreshLayout) findViewById(R.id.SwipeRefresh);
        mListView = (ListView) findViewById(R.id.lv);
        mListView.addFooterView(mFootView);
        mListView.setOnScrollListener(this);
        myAdapter = new MyAdapter(mList, this);
        mListView.setAdapter(myAdapter);


    }


    //初始化底部视图
    private void initFootView() {
        mFootView = getLayoutInflater().inflate(R.layout.layout, null);
        mLoadMore = (Button) mFootView.findViewById(R.id.Load_More_Btn);
        mPro = (ProgressBar) mFootView.findViewById(R.id.progressBar2);
        mLoadMore.setOnClickListener(this);
    }


    private void getInfo() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String s = MyOkHttp.getMyOkHttp().sendGet("http://litchiapi.jstv.com/api/GetFeeds?column=3&PageSize=10&pageIndex=" + mPageIndex + "&val=100511D3BE5301280E0992C73A9DEC41");
                    Message msg = new Message();
                    msg.obj = s;
                    mHandler.sendMessage(msg);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.Load_More_Btn:
                mPro.setVisibility(View.VISIBLE);
                mLoadMore.setVisibility(View.GONE);
                mPageIndex++;
                getInfo();
                break;
        }
    }


    //滑动状态监听
    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        Log.e("mLastIndex", mLastIndex + "条");
        Log.e("myAdapter", myAdapter.getCount() + "条");
        if (scrollState == 0 && myAdapter.getCount() == mLastIndex) {
            mPro.setVisibility(View.GONE);
            mLoadMore.setVisibility(View.VISIBLE);
        }
    }


    //滑动时走的方法
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        mLastIndex = totalItemCount - 1;
    }
}
原创粉丝点击