//MyAdapter
public class MyAdapter extends BaseAdapter {
private List<LianXiBeans.DataBean> list;
private Context context;
private final int ONE_ITEM = 0;
private final int TWO_ITEM =1;
private final int THREE_ITEM= 2;
public MyAdapter(List<LianXiBeans.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getItemViewType(int position) {
String profile_image = list.get(position).getProfile_image();
String bimageuri = list.get(position).getBimageuri();
String image1 = list.get(position).getImage1();
if (profile_image!=null && bimageuri == null && image1 == null){
return ONE_ITEM;
}else if (profile_image!=null && bimageuri != null && image1 == null){
return TWO_ITEM;
}else if (profile_image!=null && bimageuri != null && image1 != null){
return THREE_ITEM;
}else {
return ONE_ITEM;
}
}
@Override
public int getViewTypeCount() {
return 3;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int itemViewType = getItemViewType(position);
if (itemViewType == ONE_ITEM){
OneViewHolder oneViewHolder;
if (convertView==null){
oneViewHolder = new OneViewHolder();
convertView = View.inflate(context, R.layout.item01_listview,null);
oneViewHolder.item01_profile_image = convertView.findViewById(R.id.item01_url);
oneViewHolder.text01 = convertView.findViewById(R.id.title01);
convertView.setTag(oneViewHolder);
}else {
oneViewHolder = (OneViewHolder) convertView.getTag();
}
ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),oneViewHolder.item01_profile_image, MyApp.getOptions());
oneViewHolder.text01.setText(list.get(position).getText());
return convertView;
}else if (itemViewType == TWO_ITEM ){
TwoViewHolder twoViewHolder;
if (convertView==null){
twoViewHolder = new TwoViewHolder();
convertView = View.inflate(context, R.layout.item02_listview,null);
twoViewHolder.item02_profile_image = convertView.findViewById(R.id.item02_url);
twoViewHolder.item02_bimageuri = convertView.findViewById(R.id.item02_img);
twoViewHolder.text02 = convertView.findViewById(R.id.title02);
convertView.setTag(twoViewHolder);
}else {
twoViewHolder = (TwoViewHolder) convertView.getTag();
}
ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),twoViewHolder.item02_profile_image);
ImageLoader.getInstance().displayImage(list.get(position).getBimageuri(),twoViewHolder.item02_bimageuri);
twoViewHolder.text02.setText(list.get(position).getText());
return convertView;
}else if (itemViewType == THREE_ITEM){
ThreeViewHolder threeViewHolder;
if (convertView==null){
threeViewHolder = new ThreeViewHolder();
convertView = View.inflate(context, R.layout.item03_listview,null);
threeViewHolder.item03_profile_image = convertView.findViewById(R.id.item03_url);
threeViewHolder.item03_bimageuri = convertView.findViewById(R.id.item03_img);
threeViewHolder.item03_image1 = convertView.findViewById(R.id.item03_userImg);
threeViewHolder.text03 = convertView.findViewById(R.id.title03);
convertView.setTag(threeViewHolder);
}else {
threeViewHolder = (ThreeViewHolder) convertView.getTag();
}
ImageLoader.getInstance().displayImage(list.get(position).getProfile_image(),threeViewHolder.item03_profile_image, MyApp.getOptions());
ImageLoader.getInstance().displayImage(list.get(position).getBimageuri(),threeViewHolder.item03_bimageuri);
ImageLoader.getInstance().displayImage(list.get(position).getImage1(),threeViewHolder.item03_image1, MyApp.getOptions());
threeViewHolder.text03.setText(list.get(position).getText());
return convertView;
}
return null;
}
class OneViewHolder{
ImageView item01_profile_image;
TextView text01;
}
class TwoViewHolder{
ImageView item02_profile_image,item02_bimageuri;
TextView text02;
}
class ThreeViewHolder{
ImageView item03_profile_image,item03_bimageuri,item03_image1;
TextView text03;
}
}
//HttpUtils
public class HttpUtils {
private static HttpUtils httpUtils;
private HttpLinseter httpLinseter;
public static HttpUtils getInsertence(){
if (httpUtils == null){
httpUtils = new HttpUtils();
}
return httpUtils;
}
//
public void getdata(String url){
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(url);
}
class MyAsyncTask extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
String json = "";
try {
URL url = new URL(params[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = urlConnection.getInputStream();
json = steamToString(inputStream);
}
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
httpLinseter.getjsondata(s);
}
}
private String steamToString(InputStream inputStream) throws IOException {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
String s = null;
StringBuilder builder = new StringBuilder();
while ((s = reader.readLine())!=null){
builder.append(s);
}
return builder.toString();
}
//公共的接口
public interface HttpLinseter {
void getjsondata(String json);
}
public void setHttpLinseter(HttpLinseter httpLinseter) {
this.httpLinseter = httpLinseter;
}
}
//MyApplication
public class MyApp extends Application{
private Context context ;
@Override
public void onCreate() {
super.onCreate();
context = this;
initImageLoader();
}
public void initImageLoader(){
File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽
.diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
.threadPoolSize(3) // default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.writeDebugLogs() // 打印debug log
.build(); //开始构建
ImageLoader.getInstance().init(config);
}
public static DisplayImageOptions getOptions(){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
.displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(new Handler()) // default
.build();
return options;
}
}
//mainActivity
public class MainActivity extends AppCompatActivity {
private String path = "https://www.apiopen.top/satinApi?type=&page=";
private int type = 41;
private int page = 1;
private HttpUtils httpUtils;
private XListView xListView;
private List<LianXiBeans.DataBean> list;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获得组件
insetView();
//获得数据
getDataFromeNetWork();
}
//获得组件
private void insetView() {
xListView = findViewById(R.id.xlistview);
//
xListView.setPullLoadEnable(true);
//
xListView.setPullRefreshEnable(true);
//
xListView.setXListViewListener(new XListView.IXListViewListener() {
@Override
public void onRefresh() {
page = 1 ;
type = 41;
getDataFromeNetWork();
}
@Override
public void onLoadMore() {
page++;
type++;
getDataFromeNetWork();
}
});
list = new ArrayList<>();
adapter = new MyAdapter(list,MainActivity.this);
xListView.setAdapter(adapter);
}
public void getDataFromeNetWork() {
String url = path+type+page;
httpUtils = HttpUtils.getInsertence();
httpUtils.getdata(url);
httpUtils.setHttpLinseter(new HttpUtils.HttpLinseter() {
@Override
public void getjsondata(String json) {
//解析
Gson gson = new Gson();
LianXiBeans lianXiBeans = gson.fromJson(json, LianXiBeans.class);
List<LianXiBeans.DataBean> list1 = lianXiBeans.getData();
if (page ==1 && type ==41){
list.clear();
}
list.addAll(list1);
adapter.notifyDataSetChanged();
//
if (page ==1 && type ==41){
xListView.stopRefresh();
}else {
xListView.stopLoadMore();
}
}
});
}
}
//main.xml
<com.example.xlistview_lianxi.view.XListView
android:id="@+id/xlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.example.xlistview_lianxi.view.XListView>