天天看点

XListView上拉加载下拉刷新

/**
首先需要导入XListView包

*/


public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener{

    private int page=1;
    private int STATE_1 = 1;
    private int STATE_2 = 2;
    private int STATE_3;
    private String urlPath="http://www.oschina.net/action/api/tweet_list?uid=0&pageSize=20&pageIndex="+page;
    private List<News> datalist=new ArrayList<News>();
    private News news=null;
    private XListView xListView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xListView = (XListView) findViewById(R.id.lv_view);
        xListView.setPullLoadEnable(true);
        getXmlData(page);
        xListView.setXListViewListener(this);
//XListView的监听事件
 xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                News data = datalist.get(position);
                String ids = data.getId();
                Intent intent = new Intent(MainActivity.this, DesicActivity.class);
                intent.putExtra("id", ids);
                startActivity(intent);
            }
        });
    }
//使用了XUtil请求数据XML数据
 private void getXmlData(final int page) {
        HttpUtils httpUtils=new HttpUtils();
        httpUtils.send(HttpRequest.HttpMethod.GET, urlPath, new RequestCallBack<String>() {

            private MyListAdapter adapter;

            @Override
            public void onSuccess(ResponseInfo<String> responseInfo) {
                String str=responseInfo.result;
                //System.out.println("========="+str+"=========");
                try {
                    //判断,如果有数据先清空
                    if (STATE_3 == STATE_1) {
                        datalist .clear();
                    }
                    //Pull工厂
                    XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
                    XmlPullParser parser=factory.newPullParser();
//将字符串转成byte字节流
 parser.setInput(new ByteArrayInputStream(str.getBytes()),"utf-8");
                    //判断类型
                    int eventType=parser.getEventType();
                    while (eventType!=XmlPullParser.END_DOCUMENT){
                        String name=parser.getName();
                        switch (eventType){
                            case XmlPullParser.START_DOCUMENT:
                                //datalist=new ArrayList<News>();
                                break;
                            case XmlPullParser.START_TAG:
                                if("tweet".equals(name)){
                                    news=new News();
                                } else if("id".equals(name)){
                                    news.setId(parser.nextText());
                                }else if("portrait".equals(name)){
                                    news.setPortrait(parser.nextText());
                                }else if("author".equals(name)){
                                    news.setAuthor(parser.nextText());
                                }else if("body".equals(name)){
                                    news.setBody(parser.nextText());
                                }
                                break;
                            case XmlPullParser.END_TAG:
                                if(name.equals("tweet")){
                                    datalist.add(news);
                                }break;
                        }
                        eventType=parser.next();
                    }
                    adapter = new MyListAdapter(MainActivity.this,datalist);
                    xListView.setAdapter(adapter);
                    load();
                    adapter.notifyDataSetChanged();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            @Override
            public void onFailure(HttpException e, String s) {
            }
        });
    }

    public  void load(){
        //停止更新
        xListView.stopRefresh();
        //加载更多
        xListView.stopLoadMore();
        //更新时间
        xListView.setRefreshTime("刚刚");
    }
    //实现方法
    @Override
    public void onRefresh() {
        STATE_3 = STATE_1;//设置判断
        getXmlData(page);
    }

    @Override
    public void onLoadMore() {
        STATE_3 = STATE_2;//设置判断
        getXmlData(page);
    }
}

//Adapter

       
public class MyListAdapter extends BaseAdapter{
    private List<News> datalist;
    private Context context;
    private final DisplayImageOptions options;

    public MyListAdapter(Context context, List<News> datalist) {
        this.context = context;
        this.datalist = datalist;

        //图片加载(图片转换成圆形)
        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
        options = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(50)).build();
       /* ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));*/
        /*options = new DisplayImageOptions.Builder().showImageOnLoading(R.mipmap.ic_launcher).showImageOnFail
        (R.mipmap.ic_launcher).cacheInMemory(true).cacheOnDisk(true).build();*/

    }

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

    @Override
    public Object getItem(int position) {
        return datalist.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        if(convertView==null){
            convertView= LayoutInflater.from(context).inflate(R.layout.list_item,null);
            holder=new ViewHolder();
            holder.athor= (TextView) convertView.findViewById(R.id.tv_name);
            holder.title= (TextView) convertView.findViewById(R.id.tv_title);
            holder.imageView= (ImageView) convertView.findViewById(R.id.iv_img);
            convertView.setTag(holder);
        }
        holder= (ViewHolder) convertView.getTag();
        ImageLoader.getInstance().displayImage(datalist.get(position).getPortrait(),holder.imageView,options);
        holder.athor.setText(datalist.get(position).getAuthor());
        holder.title.setText(datalist.get(position).getBody());
        return convertView;
    }
    class ViewHolder{
        TextView athor;
        TextView title;
        ImageView imageView;

    }
}