/**
首先需要導入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;
}
}