XListView上拉刷新數據及加載更多

XListview靈活應用
主頁面-----Activiety:
尋找控件,
設置XlistView上下拉及刷新時間,
設置圖片緩存路徑,
進入AsyncTask異步網絡請求數據
import android.content.Context;
import android.os.Environment;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;


import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;

import view.XListView;


public class MainActivity extends AppCompatActivity {//主頁面
    XListView lv;
    private String path="http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=";
    private String path2="&page=";

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


        String path = Environment.getExternalStorageDirectory().getPath();
//        initImageLoader(this,new File(path+"/AssN"));
        init();//調用方法

    }

    public static void initImageLoader(Context c,File file) {
        // This configuration tuning is custom. You can tune every option, you may tune some of them,
        // or you can create default configuration by
        //  ImageLoaderConfiguration.createDefault(this);
        // method.
        ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(c);
        config.threadPriority(Thread.NORM_PRIORITY - 2);
        config.denyCacheImageMultipleSizesInMemory();
        config.diskCacheFileNameGenerator(new Md5FileNameGenerator());
        config.diskCacheSize(50 * 1024 * 1024); // 50 MiB
        config.tasksProcessingOrder(QueueProcessingType.LIFO);
        config.writeDebugLogs(); // Remove for release app
        config .diskCache(new UnlimitedDiscCache(file));//UnlimitedDiskCache 限制這個圖片的緩存路徑
        config .diskCacheFileCount(50);//配置sdcard緩存文件的數量
        // Initialize ImageLoader with configuration.
        ImageLoader.getInstance().init(config.build());
    }

    private void init() {
        lv = (XListView)findViewById(R.id.lv);

        lv.setPullLoadEnable(true);
        lv.setPullRefreshEnable(true);
        long l = System.currentTimeMillis();
        SimpleDateFormat formatter= new SimpleDateFormat("   yyyy年MM月dd日      HH時mm分ss秒");//設置時間

        String format = formatter.format(l);
        lv.setRefreshTime(format);
        MyTask myTask = new MyTask(lv, path, this, "GET",path2);//進入一部

        myTask.execute();

    }
}
AsyncTask頁面:
網絡請求數據,
設置xlistview的adapter,
設置xlistview上拉下滑刷新

import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ListView;


import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;


import java.net.URL;
import java.net.URLConnection;
import java.text.SimpleDateFormat;
import java.util.List;

import java.util.logging.LogRecord;

import view.XListView;



public class MyTask extends AsyncTask<String,String,String> {//異步類

    private XListView lv;
    private String path;
    private Context context;
    private String gb;
    private List<Dates> data;
    private MyAdapter myAdapter;
    private String path2;
    private static  int  PAGE=1;
    private static  int  COUTN=10;
    private Handler han=new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if((boolean)msg.obj){
                if(msg.arg1==1){
                    long l = System.currentTimeMillis();
                    SimpleDateFormat formatter= new SimpleDateFormat("   yyyy年MM月dd日      HH時mm分ss秒");//設置時間
                    String format = formatter.format(l);
                    lv.setRefreshTime(format);
                    Log.d("zzz",data.toString());
                    myAdapter.setData(data);
                    myAdapter.notifyDataSetChanged();
                    lv.stopRefresh();
                }else if(msg.arg1==2){
                    Log.d("zzz",path+COUTN+path2+PAGE);

                    myAdapter.setData(data);
                    myAdapter.notifyDataSetInvalidated();
                    lv.stopLoadMore();
                }


            }
            super.handleMessage(msg);
        }
    };

    public MyTask(XListView lv, String path, Context context,String gb,String path2){
        this.lv=lv;
        this.path=path;
        this.context=context;
        this.gb=gb;
        this.path2=path2;
    }



    @Override
    protected String doInBackground(String... params) {



        getdata();//獲取數據


        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        lv.setXListViewListener(new  XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                COUTN=10;
                PAGE=1;
                new Thread(){
                    @Override
                    public void run() {

                        boolean b = getdata();
                        Message message = new Message();
                        message.obj=b;
                        message.arg1=1;
                        han.sendMessage(message);
                        super.run();
                    }
                }.start();



            }

            @Override
            public void onLoadMore() {

                COUTN+=10;

                new Thread(){
                    @Override
                    public void run() {
                        boolean b = getdata();
                        Message message = new Message();
                        message.obj=b;
                        message.arg1=2;
                        han.sendMessage(message);
                        super.run();
                    }
                }.start();



            }
        });
         myAdapter = new MyAdapter(context, data);
        lv.setAdapter(myAdapter);//設置適配器

        super.onPostExecute(s);
    }

    public boolean getdata() {

        try {


            URL url = new URL(path+COUTN+path2+PAGE);


            HttpURLConnection cton = (HttpURLConnection) url.openConnection();
            cton.setRequestMethod(gb);
            cton.setReadTimeout(10000);
            cton.setConnectTimeout(10000);


            if(cton.getResponseCode()==200){
                InputStream inputStream = cton.getInputStream();
                String json = getjson(inputStream, "utf-8");
                Log.d("zzz","rencai");
                Gson gson = new Gson();
                Seec seec = gson.fromJson(json, Seec.class);
                data = seec.getData();


                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d("zzz",e.toString());
        }

        return  false;


    }

    private String getjson(InputStream inputStream, String s) {
        String a="";
        String s1;
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, s));
            while ((s1=reader.readLine())!=null){
                a=a+s1;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return a;
    }
}


BaseAdapter:
多條目展示:

import android.support.v7.app.ActionBar;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.util.List;

/**
 * Created by Ning.A.C on 2017/9/11.
 */

public class MyAdapter extends BaseAdapter{//適配器
    private Context context;
    private List<Dates> data;

    public List<Dates> getData() {
        return data;
    }

    public void setData(List<Dates> data) {
        this.data = data;
    }

    public MyAdapter(Context context, List<Dates> data){//構造
        this.context=context;
        this.data=data;
    }

    @Override
    public int getCount() {

        return data.size();//寫入長度
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        if(position%2==0){
            return 0;
        }else if (position%2==1){
            return 1;
        }
        return  0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {//返回視圖

        Con1 con1=null;
        Con2 con2=null;
        if(convertView==null){

            switch (getItemViewType(position)){
                case 0:
                    convertView = View.inflate(context, R.layout.item1, null);
                    con1=new Con1();
                    con1.tit1 = (TextView) convertView.findViewById(R.id.tit1);
                    con1.time1 = (TextView) convertView.findViewById(R.id.time1);
                    con1.img1=(ImageView)convertView.findViewById(R.id.img1);
                    convertView.setTag(con1);
                    break;
                case 1:
                    convertView = View.inflate(context, R.layout.layout, null);
                    con2=new Con2();
                    con2.tit2 = (TextView) convertView.findViewById(R.id.tit2);
                    con2.time2 = (TextView) convertView.findViewById(R.id.time2);

                    convertView.setTag(con2);
                    break;
            }





        }


        switch (getItemViewType(position)){
            case 0:
                con1= (Con1) convertView.getTag();
                con1.time1.setText(data.get(position).getTopTime());
                con1.tit1.setText(data.get(position).getTitle());

                DisplayImageOptions build = new DisplayImageOptions.Builder().showImageOnFail(R.mipmap.ic_launcher).showImageOnLoading(R.mipmap.ic_launcher).cacheOnDisk(true).cacheInMemory(true).build();
                ImageLoaderConfiguration build1 = new ImageLoaderConfiguration.Builder(context).defaultDisplayImageOptions(build).build();
                ImageLoader.getInstance().init(build1);
                ImageLoader.getInstance().displayImage(data.get(position).getImg(),con1.img1);
                break;
            case 1:
                con2= (Con2) convertView.getTag();
                con2.time2.setText(data.get(position).getTopTime());
                con2.tit2.setText(data.get(position).getTitle());


                break;
        }




        return convertView;
    }



    class Con1{
    TextView tit1,time1;
    ImageView img1;
}
class Con2{
    TextView tit2,time2;
}

}

Layout佈局,主頁面:





//XListView頭尾視圖需個人配置

xlistview_header:頭配置


 <RelativeLayout
        android:id="@+id/xlistview_header_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:src="@mipmap/ic_launcher"
            android:id="@+id/xlistview_header_arrow"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_marginLeft="50dp" />

        <ProgressBar
            android:id="@+id/xlistview_header_progressbar"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_marginLeft="50dp" />

        <TextView
            android:id="@+id/xlistview_header_hint_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:layout_toRightOf="@+id/xlistview_header_arrow" />

        <TextView
            android:id="@+id/te"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/xlistview_header_arrow"
            android:layout_centerHorizontal="true"
            android:text="上次刷新時間:"
            android:layout_marginTop="10dp"
            />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/te"
            android:layout_below="@+id/xlistview_header_arrow"
            android:layout_marginTop="10dp"
            android:id="@+id/xlistview_header_time"
            />

    </RelativeLayout>


xlistview_footer:腳佈局:




 <RelativeLayout
        android:id="@+id/xlistview_footer_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:id="@+id/xlistview_footer_progressbar"
            />
        <TextView
            android:id="@+id/xlistview_footer_hint_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"/>

    </RelativeLayout>







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章