天天看點

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;

    }
}