在我们使用XlistView的时候,我们可以将我们所要用到的加载页面所需要的资源文件都可以事先放在一个library中:
https://github.com/Maxwin-z/XListView-Android
一. 首先将library导入我的工程中
二. 操作我们module的代码:
注意:在我们进行联网操作的时候,一定要加入相依的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
⑴. Main主界面:
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener {
private String urlString = "http://api.fang.anjuke.com/m/android/1.3/shouye/recInfosV3/?city_id=14&lat=40.04652&lng=116.306033&api_key=androidkey&sig=9317e9634b5fbc16078ab07abb6661c5&macid=45cd2478331b184ff0e15f29aaa89e3e&app=a-ajk&_pid=11738&o=PE-TL10-user+4.4.2+HuaweiPE-TL10+CHNC00B260+ota-rel-keys%2Crelease-keys&from=mobile&m=Android-PE-TL10&cv=9.5.1&cid=14&i=864601026706713&v=4.4.2&pm=b61&uuid=1848c59c-185d-48d9-b0e9-782016041109&_chat_id=0&qtime=20160411091603";
private XListView xlv;
//设置一个全局的list集合变量
private List<News.ResultBean.RowsBean> list = new ArrayList<>();
private MyAdapter adapter;
private ImageLoader instance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
xlv = (XListView) findViewById(R.id.xlv);
instance = ImageLoader.getInstance();
//我们首先将空白的list,设置,而后等我我解析出数据后我们就可以直接通过刷新适配器添加数据
adapter = new MyAdapter();
xlv.setAdapter(adapter);
initData();
//为xlv设置监听事件,实现MoreComplete()、onLoadMore()两个方法,表示可以进行加载和刷新
xlv.setXListViewListener(this);
//允许上拉加载更多
xlv.setPullLoadEnable(true);
}
private void initData() {
new MyAsyncTask().execute(urlString);
}
class MyAsyncTask extends AsyncTask<String, Void, String>{
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
News news = gson.fromJson(s, News.class);
List<News.ResultBean.RowsBean> rows = news.getResult().getRows();
list.addAll(rows);
//适配器刷新数据
adapter.notifyDataSetChanged();
}
@Override
protected String doInBackground(String... strings) {
return NetDataJson.getNetData(strings[0]);
}
}
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = View.inflate(MainActivity.this,R.layout.item,null);
ImageView imageView = view.findViewById(R.id.iv);
TextView textView = view.findViewById(R.id.tv);
textView.setText(list.get(i).getInfo().getLoupan_name());
instance.displayImage(list.get(i).getInfo().getDefault_image(),imageView);
return view;
}
}
//刷新
@Override
public void onRefresh() {
list.clear();
initData();
MoreComplete();
}
private void MoreComplete() {
xlv.stopRefresh();
xlv.stopLoadMore();
xlv.setRefreshTime("刚刚");
}
//加载更多
@Override
public void onLoadMore() {
initData();
MoreComplete();
}
}
⑵. MApp界面:
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class MApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);
}
}
注意:在我们使用ImageLoader的时候,一定要在libs文件夹中加入相应的jar包或者在gradle中导入依赖:
compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’
⑶. Bean界面:
import java.util.List;
public class News {
private String status;
private ResultBean result;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public ResultBean getResult() {
return result;
}
public void setResult(ResultBean result) {
this.result = result;
}
public static class ResultBean {
private String title;
private String total;
private int next_page;
private List<RowsBean> rows;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getTotal() {
return total;
}
public void setTotal(String total) {
this.total = total;
}
public int getNext_page() {
return next_page;
}
public void setNext_page(int next_page) {
this.next_page = next_page;
}
public List<RowsBean> getRows() {
return rows;
}
public void setRows(List<RowsBean> rows) {
this.rows = rows;
}
public static class RowsBean {
private String fang_type;
private InfoBean info;
public String getFang_type() {
return fang_type;
}
public void setFang_type(String fang_type) {
this.fang_type = fang_type;
}
public InfoBean getInfo() {
return info;
}
public void setInfo(InfoBean info) {
this.info = info;
}
public static class InfoBean {
private String loupan_id;
private String loupan_name;
private String city_id;
private String new_price_value;
private String new_price_back;
private int price;
private String region_id;
private String region_title;
private String sub_region_id;
private String sub_region_title;
private String default_image;
private String address;
private ShowActivityBean show_activity;
private TuangouBean tuangou;
private ZhuankftBean zhuankft;
private KftBean kft;
private String sale_label;
private String loupan_property_type;
private String tags;
private String status_sale;
private int has_sale;
private String lat;
private String lng;
private String baidu_lat;
private String baidu_lng;
private String kaipan_new_date;
private ActivityTagsBean activity_tags;
private int has_consultant;
private String sale_title;
private RecommendPriceBean recommend_price;
private String fang_type;
private BrandBean brand;
private int has_video;
private int has_aerial_photo;
private int has_quanjing;
private String area_rage;
private String jianzhu_area;
private List<String> activity_tags_icon;
private List<?> multi_image;
private List<ActivityBean> activity;
public String getLoupan_id() {
return loupan_id;
}
public void setLoupan_id(String loupan_id) {
this.loupan_id = loupan_id;
}
public String getLoupan_name() {
return loupan_name;
}
public void setLoupan_name(String loupan_name) {
this.loupan_name = loupan_name;
}
public String getCity_id() {
return city_id;
}
public void setCity_id(String city_id) {
this.city_id = city_id;
}
public String getNew_price_value() {
return new_price_value;
}
public void setNew_price_value(String new_price_value) {
this.new_price_value = new_price_value;
}
public String getNew_price_back() {
return new_price_back;
}
public void setNew_price_back(String new_price_back) {
this.new_price_back = new_price_back;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getRegion_id() {
return region_id;
}
public void setRegion_id(String region_id) {
this.region_id = region_id;
}
public String getRegion_title() {
return region_title;
}
public void setRegion_title(String region_title) {
this.region_title = region_title;
}
public String getSub_region_id() {
return sub_region_id;
}
public void setSub_region_id(String sub_region_id) {
this.sub_region_id = sub_region_id;
}
public String getSub_region_title() {
return sub_region_title;
}
public void setSub_region_title(String sub_region_title) {
this.sub_region_title = sub_region_title;
}
public String getDefault_image() {
return default_image;
}
public void setDefault_image(String default_image) {
this.default_image = default_image;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public ShowActivityBean getShow_activity() {
return show_activity;
}
public void setShow_activity(ShowActivityBean show_activity) {
this.show_activity = show_activity;
}
public TuangouBean getTuangou() {
return tuangou;
}
public void setTuangou(TuangouBean tuangou) {
this.tuangou = tuangou;
}
public ZhuankftBean getZhuankft() {
return zhuankft;
}
public void setZhuankft(ZhuankftBean zhuankft) {
this.zhuankft = zhuankft;
}
public KftBean getKft() {
return kft;
}
public void setKft(KftBean kft) {
this.kft = kft;
}
public String getSale_label() {
return sale_label;
}
public void setSale_label(String sale_label) {
this.sale_label = sale_label;
}
public String getLoupan_property_type() {
return loupan_property_type;
}
public void setLoupan_property_type(String loupan_property_type) {
this.loupan_property_type = loupan_property_type;
}
public String getTags() {
return tags;
}
public void setTags(String tags) {
this.tags = tags;
}
public String getStatus_sale() {
return status_sale;
}
public void setStatus_sale(String status_sale) {
this.status_sale = status_sale;
}
public int getHas_sale() {
return has_sale;
}
public void setHas_sale(int has_sale) {
this.has_sale = has_sale;
}
public String getLat() {
return lat;
}
public void setLat(String lat) {
this.lat = lat;
}
public String getLng() {
return lng;
}
public void setLng(String lng) {
this.lng = lng;
}
public String getBaidu_lat() {
return baidu_lat;
}
public void setBaidu_lat(String baidu_lat) {
this.baidu_lat = baidu_lat;
}
public String getBaidu_lng() {
return baidu_lng;
}
public void setBaidu_lng(String baidu_lng) {
this.baidu_lng = baidu_lng;
}
public String getKaipan_new_date() {
return kaipan_new_date;
}
public void setKaipan_new_date(String kaipan_new_date) {
this.kaipan_new_date = kaipan_new_date;
}
public ActivityTagsBean getActivity_tags() {
return activity_tags;
}
public void setActivity_tags(ActivityTagsBean activity_tags) {
this.activity_tags = activity_tags;
}
public int getHas_consultant() {
return has_consultant;
}
public void setHas_consultant(int has_consultant) {
this.has_consultant = has_consultant;
}
public String getSale_title() {
return sale_title;
}
public void setSale_title(String sale_title) {
this.sale_title = sale_title;
}
public RecommendPriceBean getRecommend_price() {
return recommend_price;
}
public void setRecommend_price(RecommendPriceBean recommend_price) {
this.recommend_price = recommend_price;
}
public String getFang_type() {
return fang_type;
}
public void setFang_type(String fang_type) {
this.fang_type = fang_type;
}
public BrandBean getBrand() {
return brand;
}
public void setBrand(BrandBean brand) {
this.brand = brand;
}
public int getHas_video() {
return has_video;
}
public void setHas_video(int has_video) {
this.has_video = has_video;
}
public int getHas_aerial_photo() {
return has_aerial_photo;
}
public void setHas_aerial_photo(int has_aerial_photo) {
this.has_aerial_photo = has_aerial_photo;
}
public int getHas_quanjing() {
return has_quanjing;
}
public void setHas_quanjing(int has_quanjing) {
this.has_quanjing = has_quanjing;
}
public String getArea_rage() {
return area_rage;
}
public void setArea_rage(String area_rage) {
this.area_rage = area_rage;
}
public String getJianzhu_area() {
return jianzhu_area;
}
public void setJianzhu_area(String jianzhu_area) {
this.jianzhu_area = jianzhu_area;
}
public List<String> getActivity_tags_icon() {
return activity_tags_icon;
}
public void setActivity_tags_icon(List<String> activity_tags_icon) {
this.activity_tags_icon = activity_tags_icon;
}
public List<?> getMulti_image() {
return multi_image;
}
public void setMulti_image(List<?> multi_image) {
this.multi_image = multi_image;
}
public List<ActivityBean> getActivity() {
return activity;
}
public void setActivity(List<ActivityBean> activity) {
this.activity = activity;
}
public static class ShowActivityBean {
}
public static class TuangouBean {
}
public static class ZhuankftBean {
}
public static class KftBean {
}
public static class ActivityTagsBean {
}
public static class RecommendPriceBean {
}
public static class BrandBean {
}
public static class ActivityBean {
/**
* type : qiang
* icon : http://pic1.ajkimg.com/material/get/ba184d7d3f5aaf1a303c85308b3d32c0.png
* title : 全景西山惊喜“价”到
*/
private String type;
private String icon;
private String title;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
}
}
}
}
⑷. 主界面布局:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.xlistview.MainActivity">
<com.bwie.xlistviewlibrary.View.XListView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.constraint.ConstraintLayout>
⑸. 条目界面布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:padding="10dp">
<ImageView
android:id="@+id/iv"
android:layout_width="150dp"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp" />
</LinearLayout>