/*
异步访问网络,解析请求的json数据,加载数据到ListView。
三大块东西:异步请求,JSON解析,自定义适配器
convertView 把从XML文件读出来的信息装到一个view里,当这个convertView不存在时,即第一次使用它
,我们就创建一个item布局的View对象并赋给convertView,以后使用convertView时
,只需从convertView中getTag取出来就可以,不需要再次创建item的布局对象了,这样便提高了性能。
*/
public class RequestDataActivity extends AppCompatActivity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view_demo);
//获取环境,服务支持
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//加载指定布局资源
View view = layoutInflater.inflate(R.layout.header_list_demo, null);
//添加页脚视图。将获取的布局资源添加到ListView的指定位置
mListView.addFooterView(view);
//开启异步:request请求数据->JSON解析数据->开启setAdapter,传参数到已经准备好的适配器,进行一系列操作后实现setAdapter
new AppAsyncTask().execute();
}
//定义适配器内部类,处理数据和列表的连接
public class AppListAdapter extends BaseAdapter {
private Context mContext;
private List<LessonInfo> mInfos;//课程信息 自定义类
public AppListAdapter(Context context, List<LessonInfo> infos) {
mContext = context;
mInfos = infos;
}
@Override
public int getCount() {
return mInfos.size();
}
@Override
public Object getItem(int position) {
return mInfos.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//ListView 针对List中每个item,要求 adapter “给我一个视图” (getView),一个新的视图被返回并显示
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
//循环利用itemview
ViewHolder viewHolder;
//布局资源获取服务,用于加载布局资源
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//如果空,用convertView把控件信息给到这个item,即用viewHolder去调用循环器做到循环利用itemview。
//通过convertview的setTag方法和getTag方法来将我们要显示的数据来绑定在convertview上。
// 如果convertview 是第一次展示我们就创建新的Holder对象与之绑定
// ,并在最后通过return convertview 返回,去显示;
// 如果convertview 是回收来的那么我们就不必创建新的