XListView实现多条目网络数据刷新加载 网络加载图片

所属分类: 软件编程 / Android 阅读数: 41
收藏 0 赞 0 分享

本文实例为大家分享了XListView实现刷新加载的具体代码,供大家参考,具体内容如下

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 pager = findViewById(R.id.viewpager);
 group = findViewById(R.id.group);

 li = new ArrayList<>();
 li.add(new Afragment());
 li.add(new Bfragment());
 li.add(new Cfragment());
 li.add(new Dfragment());

 pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
  @Override
  public Fragment getItem(int position) {
  return li.get(position);
  }

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

 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  @Override
  public void onCheckedChanged(RadioGroup radioGroup, int i) {

  switch (i){
   case R.id.r1:
   pager.setCurrentItem(0);
   break;
   case R.id.r2:
   pager.setCurrentItem(1);
   break;
   case R.id.r3:
   pager.setCurrentItem(2);
   break;
   case R.id.r4:
   pager.setCurrentItem(3);
   break;
  }
  }
 });

 }

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
 <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=".ui.MainActivity">
 <LinearLayout
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 >
 <android.support.v4.view.ViewPager
  android:id="@+id/viewpager"
  android:layout_width="match_parent"
  android:layout_height="0dp"
  android:layout_weight="9"
  >
 
 </android.support.v4.view.ViewPager>
 
 <RadioGroup
  android:id="@+id/group"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:orientation="horizontal"
  >
  <RadioButton
  android:id="@+id/r1"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:button="@null"
  android:gravity="center"
  android:layout_weight="1"
  android:text="Afrag"/>
  <RadioButton
  android:id="@+id/r2"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:button="@null"
  android:gravity="center"
  android:layout_weight="1"
  android:text="Bfrag"/>
  <RadioButton
  android:id="@+id/r3"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:button="@null"
  android:gravity="center"
  android:layout_weight="1"
  android:text="Cfrag"/>
  <RadioButton
  android:id="@+id/r4"
  android:layout_width="wrap_content"
  android:layout_height="match_parent"
  android:button="@null"
  android:gravity="center"
  android:layout_weight="1"
  android:text="Dfrag"/>
 
 </RadioGroup>
 
 </LinearLayout>
 
</android.support.constraint.ConstraintLayout>

Afragment.java

public class Afragment extends Fragment{
 private int page=1;
 private XListView listView;
 private MyBaseAdapter adapter;
 ResponseBean responseBean;
 
 @Nullable
 @Override
 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  View view = View.inflate(getActivity(), R.layout.afrag, null);
 
  listView = view.findViewById(R.id.xlv);
  adapter = new MyBaseAdapter(getLayoutInflater());
  listView.setAdapter(adapter);
 
  listView.setPullLoadEnable(true);
  listView.setXListViewListener(new XListView.IXListViewListener() {
  @Override
  public void onRefresh() {
   page=0;
   loadData(page);
  }
 
  @Override
  public void onLoadMore() {
   loadData(page);
 
  }
  });
  loadData(page);
  return view;
 }
 
 private String url =
  "http://apis.juhe.cn/cook/query?key=3ec004200a6a2f4cf4774e480c006375&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=";
 
 private void loadData(int page){
 
  String urlString=url+page;
  new AsyncTask<String,Void,List<DataItem>>(){
 
  @Override
  protected List<DataItem> doInBackground(String... strings) {
   try {
   URL url = new URL(strings[0]);
   HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
   urlConnection.setRequestMethod("GET");
   urlConnection.setReadTimeout(5000);
   urlConnection.setConnectTimeout(5000);
   int responseCode = urlConnection.getResponseCode();
   if (responseCode==200){
    String result=String2(urlConnection.getInputStream());
    responseBean = new Gson().fromJson(result, ResponseBean.class);
   }else {
 
   }
   return responseBean == null ?null:responseBean.getResult().getData();
   } catch (MalformedURLException e) {
   e.printStackTrace();
   } catch (IOException e) {
   e.printStackTrace();
   }
   return null;
  }
 
  @Override
  protected void onPostExecute(List<DataItem> dataItems) {
   super.onPostExecute(dataItems);
   if (dataItems == null) {
   Toast.makeText(getActivity(), "请求数据错误", Toast.LENGTH_LONG).show();
   return;
   }
   updateData(dataItems);
   loadCompleted();
 
  }
  }.execute(urlString);
 }
 
 private void updateData(List<DataItem> dataItems){
  if (page==0){
  adapter.setDatas(dataItems);
  }else {
  adapter.addDatas(dataItems);
 
  }
 
 }
 
 private void loadCompleted(){
  page++;
  listView.stopRefresh();
  listView.stopLoadMore();
 }
 
 private String String2(InputStream stream){
  StringBuilder sb = new StringBuilder();
  BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
  try {
  for (String tmp=reader.readLine();tmp!=null;tmp=reader.readLine()){
   sb.append(tmp);
  }
  } catch (IOException e) {
  e.printStackTrace();
  }
  return sb.toString();
 }
 }

MyBaseAdapter.java

public class MyBaseAdapter extends BaseAdapter{

 private List<DataItem> datas;
 private LayoutInflater layoutInflater;

 public MyBaseAdapter(LayoutInflater layoutInflater) {
 this.layoutInflater = layoutInflater;
 datas=new ArrayList<>();
 }

 public void setDatas(List<DataItem> datas) {
 datas.clear();
 if (datas!=null){
  datas.addAll(datas);
 }
 notifyDataSetChanged();
 }

 public void addDatas(List<DataItem> dataItems) {
 if (dataItems!=null){
  datas.addAll(dataItems);
  notifyDataSetChanged();
 }

 }

 public final int VIEW_TYPE_COUNT=2;
 public final int IMAGE_TEXT_TYPE=0;
 public final int TEXT_TYPE=1;
 @Override
 public int getItemViewType(int position) {
 if (position % 2==0){
  return IMAGE_TEXT_TYPE;
 }else {
  return TEXT_TYPE;
 }

 }

 @Override
 public int getViewTypeCount() {
 return VIEW_TYPE_COUNT;
 }

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

 @Override
 public Object getItem(int i) {
 return datas.get(i);
 }

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

 @Override
 public View getView(int i, View view, ViewGroup viewGroup) {

 if (getItemViewType(i)==IMAGE_TEXT_TYPE){
  ViewHolder viewHolder=null;
  if (view==null){
  view = layoutInflater.inflate(R.layout.item, viewGroup,false);
  viewHolder = new ViewHolder(view);

  }else {
  viewHolder = (ViewHolder) view.getTag();
  }
  viewHolder.bindData((DataItem) getItem(i));
 }else {
  ViewHolder2 viewHolder2;
  if (view==null){
  view = layoutInflater.inflate(R.layout.item_text, viewGroup, false);
  viewHolder2 = new ViewHolder2();
  viewHolder2.textView = view.findViewById(R.id.text);
  view.setTag(viewHolder2);
  }else {
  viewHolder2 = (ViewHolder2) view.getTag();
  }

  viewHolder2.textView.setText(datas.get(i).getTitle());
 }

 return view;
 }


 public class ViewHolder{
 private ImageView icon;
 private TextView title;
 private TextView date;


 public ViewHolder(View view) {
  icon = view.findViewById(R.id.icon);
  title = view.findViewById(R.id.title);
  date = view.findViewById(R.id.date);

  view.setTag(this);
 }

 public void bindData(DataItem item) {
  title.setText(item.getTitle());
  date.setText(item.getId());

  ImageLoader.getInstance().displayImage(item.getFirst(),icon
   , ImageloaderConfigs.getDefult(icon.getContext()));
 }
 }

 public class ViewHolder2{
 TextView textView;

 }

}

ImageLoaderConfigs.java

public class ImageloaderConfigs {
 public static ImageLoaderConfiguration getImageLoader(Context context){
 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(context)
  .memoryCacheSizePercentage(13)
  .diskCacheSize(50*1024*1024)
  .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
  .writeDebugLogs()
  .build();
 return configuration;
 }

 public static DisplayImageOptions getDefult(Context context){
 DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
  .cacheInMemory(true)
  .cacheOnDisk(true)
  .bitmapConfig(Bitmap.Config.RGB_565)
  .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
  .displayer(new CircleBitmapDisplayer())
  .build();
 return imageOptions;
 }

}

App.java

public class App extends Application{
 @Override
 public void onCreate() {
 super.onCreate();
 ImageLoader.getInstance().init(ImageloaderConfigs.getImageLoader(this));
 }
}

ResponsBean.java

public class ResponseBean {
 private int resultcode;
 private String reason;
 private Result result;

 public int getResultcode() {
 return resultcode;
 }

 public String getReason() {
 return reason;
 }

 public Result getResult() {
 return result;
 }

 public class Result{
 private List<DataItem> data;

 public List<DataItem> getData() {
  return data;
 }
 }
}

DataItem.java

public class DataItem {
 private String id;
 private String title;
 private List<String> albums;

 public String getId() {
 return id;
 }

 public String getTitle() {
 return title;
 }

 public List<String> getAlbums() {
 return albums;
 }
 public String getFirst(){
 return albums==null || albums.size()==0? "" : albums.get(0);
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

使用ViewPager实现android软件使用向导功能实现步骤

现在的大部分android软件,都是使用说明,就是第一次使用该软件时,会出现向导,可以左右滑动,然后就进入应用的主界面了,下面我们就实现这个功能
收藏 0 赞 0 分享

android在异步任务中关闭Cursor的代码方法

android在异步任务中如何关闭Cursor?在我们开发应用的时候,很多时候会遇到这种问题,下面我们就看看代码如何实现
收藏 0 赞 0 分享

Android自定义桌面功能代码实现

android自定义桌面其实很简单,看一个例子就明白了
收藏 0 赞 0 分享

android将图片转换存到数据库再从数据库读取转换成图片实现代码

有时候我们想把图片存入到数据库中,尽管这不是一种明智的选择,但有时候还是不得以会用到,下面说说将图片转换成byte[]数组存入到数据库中去,并从数据库中取出来转换成图像显示出来
收藏 0 赞 0 分享

TextView显示系统时间(时钟功能带秒针变化

用System.currentTimeMillis()可以获取系统当前的时间,我们可以开启一个线程,然后通过handler发消息,来实时的更新TextView上显示的系统时间,可以做一个时钟的功能
收藏 0 赞 0 分享

Android用ListView显示SDCard文件列表的小例子

本文简单实现了用ListView显示SDCard文件列表,目录的回退等功能暂不讨论,获取文件列表,files即为所选择目录下的所有文件列表
收藏 0 赞 0 分享

Android拦截外拨电话程序示例

这篇文章主要介绍了Android拦截外拨电话的示例,大家参考使用吧
收藏 0 赞 0 分享

通过Html网页调用本地安卓(android)app程序代码

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式
收藏 0 赞 0 分享

android Textview文字监控(Textview使用方法)

以手机号充值为例,当用户输入最后一位数时候,进行汇率的变换,本文就实现类似这样的功能
收藏 0 赞 0 分享

Android ListView长按弹出菜单二种实现方式示例

这篇文章主要介绍了Android ListView长按弹出菜单的方法,大家参考实现
收藏 0 赞 0 分享
查看更多