设为首页 加入收藏

TOP

使用异步任务加载网络上json数据并加载到ListView中(四)
2017-10-13 10:35:52 】 浏览:6048
Tags:使用 异步 任务 加载 网络 json 数据 ListView
ast.LENGTH_SHORT).show();
52 } 53 } 54 }

  因为要更新UI中的ListView,所以在DownloadAsyncTask的构造函数中传入了ListView和Context两个形参。在doInBackground()方法中完成了数据计算操作后,将返回一个List<News>类型的变量,会接着执行onPostExecute()方法,变量会传到他的形参中。通过这个List集合,我们来完成ListView的数据的填充。填充ListView首先需要自定义一个适配器继承自BaseAdapter,我们取名为MyBaseAdapter。为其传入Context和list两个参数,至于ListView的填充请看我的另一篇博客,下面直接上代码:

 1 package com.yztc.lx.asynctasklistview.com.yztc.lx.adapter;
 2 
 3 import android.content.Context;
 4 import android.view.LayoutInflater;
 5 import android.view.View;
 6 import android.view.ViewGroup;
 7 import android.widget.BaseAdapter;
 8 import android.widget.TextView;
 9 
10 import com.yztc.lx.asynctasklistview.R;
11 import com.yztc.lx.asynctasklistview.com.yztc.lx.bean.News;
12 
13 import java.util.List;
14 
15 /**
16  * Created by Lx on 2016/8/10.
17  */
18 
19 public class MyBaseAdapter extends BaseAdapter {
20     private Context mContext;
21     private List<News> list;
22     private LayoutInflater inflater;
23 
24     public MyBaseAdapter(Context context, List<News> list) {
25         this.mContext = context;
26         this.list = list;
27         this.inflater=LayoutInflater.from(mContext);
28     }
29 
30     /**
31      *
32      * @return  要填充的集合的长度
33      */
34     @Override
35     public int getCount() {
36         return list.size();
37     }
38 
39 
40     @Override
41     public Object getItem(int position) {
42         return list.get(position);
43     }
44 
45     @Override
46     public long getItemId(int position) {
47         return position;
48     }
49 
50     /**
51      *
52      * @param position  在适配器数据集合中的item的位置
53      * @param convertView  已经填充过的View,可以用来重用来提高加载速度
54      * @param parent  这个view将要展示的父容器
55      * @return
56      */
57     @Override
58     public View getView(int position, View convertView, ViewGroup parent) {
59         News news=list.get(position);
60         ViewHolder holder;
61         if(convertView==null){
62             holder=new ViewHolder();
63             convertView=inflater.inflate(R.layout.item,null);
64             holder.tv_id= (TextView) convertView.findViewById(R.id.tv_id);
65             holder.tv_summary= (TextView) convertView.findViewById(R.id.tv_summary);
66             holder.tv_title= (TextView) convertView.findViewById(R.id.tv_title);
67             convertView.setTag(holder);
68         }else{
69             holder= (ViewHolder) convertView.getTag();
70         }
71         holder.tv_id.setText(""+news.getId());
72         holder.tv_title.setText(news.getTitle());
73         holder.tv_summary.setText(news.getSummary());
74         return convertView;
75     }
76 
77     class ViewHolder{
78         private TextView tv_title,tv_summary,tv_id;
79     }
80 }

  这里需要注意的是,不要忘了为ListView设置适配器setAdapter(adapter).。还有就是setText()方法有一个重载形式是:setText(int i)传入了一个int类型的形参的话,系统会根据这个int类型的参数去查找资源ID,所以如果要为TextView设置一个整型的形参的话,需要将其转换为字符串的格式,不然会报错

  接下来要做的就是在主函数中调用我们的异步任务了:

 1 package com.yztc.lx.asynctasklistview;
 2 
 3 import android.os.Bundle;
 4 import android.support.v7.app.AppCompatActivity;
 5 import android.widget.ListView;
 6 import android.widget.Spinner;
 7 
 8 import com.yztc.lx.asynctasklistview.com.yztc.lx.async.DownloadAsyncTask;
 9 
10 public class MainActivity extends AppCompatActivity {
11 
12     private ListView lv;
13     private String urlPath = "http://api.m.mtime.cn/News/NewsList.api?pageIndex=1";
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState
首页 上一页 1 2 3 4 5 下一页 尾页 4/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android AsyncTask 深度理解、简.. 下一篇实用控件分享:自定义逼真相机光..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目