天天看點

!XListView_自定義條目

MainActivity

package com.example.myapplication;

import android.os.AsyncTask;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import me.maxwin.view.XListView;

public class MainActivity extends AppCompatActivity {

    private XListView news;
    private int mPage;
    private NewsAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPage = 1;

        news = findViewById(R.id.news);
        mAdapter = new NewsAdapter(this);
        news.setAdapter(mAdapter);

        news.setPullRefreshEnable(true);
        //設定開啟加載更多
        news.setPullLoadEnable(true);

        news.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {//重新整理
                mPage = 1;
                loadData();
            }

            @Override
            public void onLoadMore() {//加載
                mPage ++;
                loadData();
            }
        });

        loadData();
    }

    private void loadData() {
        new AsyncTask<Void, Void, List<String>>(){
            @Override
            protected List<String> doInBackground(Void... voids) {
                SystemClock.sleep(1000);
                List<String> result = new ArrayList<>();
                String pre = new Date().toLocaleString();
                for (int i = 0; i < 30; i++) {
                    result.add(pre + "第" + mPage + "頁" + i);
                }
                return result;
            }

            @Override
            protected void onPostExecute(List<String> strings) {
                if(mPage == 1) {
                    mAdapter.setDatas(strings);
                } else {
                    mAdapter.addDatas(strings);
                }
                //告訴XListView停止重新整理/加載
                news.stopRefresh();
                news.stopLoadMore();
            }
        }.execute();
    }
}

           

Adapter擴充卡

package com.example.myapplication;

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

import java.util.ArrayList;
import java.util.List;

public class NewsAdapter extends BaseAdapter {

    private List<String> mDatas;
    private Context mContext;

    public NewsAdapter(Context context) {
        mContext = context;
        mDatas = new ArrayList<>();
    }

    //更新資料
    public void setDatas(List<String> datas) {
        ///
        //mDatas = datas;

        //清
        mDatas.clear();
        //添加新的
        mDatas.addAll(datas);
        notifyDataSetChanged();
    }


    //追加資料
    public void addDatas(List<String> datas) {
        //mDatas = datas;
        //追加所有資料
        mDatas.addAll(datas);
       /* for (String tmp:datas) {
            mDatas.add(tmp);
        }*/
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mDatas.size();
    }

    @Override
    public String getItem(int position) {
        return mDatas.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;

        if(convertView == null) {
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);
            viewHolder = new ViewHolder(convertView);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        viewHolder.bindData(getItem(position));

        return convertView;
    }

    class ViewHolder {
        TextView textView;

        public ViewHolder(View itemView) {
            this.textView = itemView.findViewById(R.id.title);
            itemView.setTag(this);
        }

        public void bindData(String title) {
            textView.setText(title);
        }
    }
}

           

繼續閱讀