亲宝软件园·资讯

展开

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

FanRQ_ 人气:0

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);
 }

加载全部内容

相关教程
猜你喜欢
用户评论