WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
来源:互联网 发布:java web敏捷开发框架 编辑:程序博客网 时间:2024/05/19 14:54
2.技能描述:
实现如图所示效果,使用DrawerLayout实现页面左侧滑出,页面左侧抽屉页面包含头像和4个条目,图片可以使用小机器人图标,右侧内容显示列表,从以下接口地址获取网络数据:
http://data.v.qq.com/videocms/getNewsvideoList.php?ref=pclient&appkey=6UkwV9DeHr9_PC&vsite=new_vshou&ename=new_vs_feature&report=web.news&_=1504358456351
注意:获取接口的数据需要用字符串替换的方式去除掉最前面的“content(”和最后面“);”只保留content()中间的json数据。
获取到网络数据后根据有无“vplus_pic”字段进行多条目加载,当没有vplus_pic字段时,列表条目只显示标题文字,有vplus_pic字段时,列表条目显示图片,图片地址即为vplus_pic中获取的值。
使用Universal-Image-Loader加载图片,全局配置Universal-Image-Loader,设置加载中和加载失败时的图片为小机器人,设置开启内存缓存和磁盘缓存,设置加载图片的线程数为3。
实现思路:
1.整体布局使用DrawerLayout(5分),DrawerLauout的抽屉页面包含上方的头像和下方的4个条目(5分)
2.封装网络请求工具类(5分),进入页面后,开启子线程,在子线程中调用网络请求获取数据(5分)
3.获取到网络数据之后,进行字符串替换(5分),替换后的数据进行解析(5分),解析后的数据回调到主线程中(5分)
4.为ListView添加适配器,传入解析后的数据(5分),重写自定义适配器的几个重要方法(5分)
5.重写适配器的多条目加载方法(5分),根据vplus_pic的有无进行判断,返回两种类型(5分)
6.提供多条目加载的两种布局文件,在获取条目视图的方法中根据类型进行加载(5分)
7.Application中全局初始化Universal-Image-Loader(5分),设置加载中和加载失败的图片(5分),配置开启磁盘缓存和内存缓存(5分),配置加载图片的线程数(5分)
8.适配器中使用Universal-Image-Loader进行加载图片(5分)
9.数据加载完成后刷新适配器(5分)
10.要求:
项目名称命名规范,姓名+时间,例:张三,项目名称为-Zhangsan20171113,项目包名为com.bwie.姓名全拼(5分),功能代码模块中加入注释。(5分)
MainActivity
package com.bwei.lifangxin20171113;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
/**
* 1.整体布局使用DrawerLayout(5分),DrawerLauout的抽屉页面包含上方的头像和下方的4个条目(5分)
*2.2,进入页面后,开启子线程,在子线程中调用网络请求获取数据(5分)
*/
public class MainActivity extends AppCompatActivity {
String urlstr="http://data.v.qq.com/videocms/getNewsvideoList.php?ref=pclient&appkey=6UkwV9DeHr9_PC&vsite=new_vshou&ename=new_vs_feature&report=web.news&_=1504358456351";
private DrawerLayout drawer;
private ListView dl_lv;
private ListView lv;
List<JavaBean.DataBean.ContentBean> list = new ArrayList<>();
String dlStr[] = {"客服热线","营业部网点","系统设置","换肤"};
private String s;
private List<JavaBean.DataBean.ContentBean> content;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//判断网络
// NetUtils.getNetType(this);
//使用butterKnife来注解控件;
//ButterKnife.bind(this);
//初始化布局和试图
initView();
//初始化DrawerLayout数据
initData();
//给Item设置点击事件 关闭侧滑
setListener();
//开启子线程,在子线程中调用网络请求获取数据
// startThread();
//为ListView添加适配器,传入解析后的数据(5分),重写自定义适配器的几个重要方法(5分)
adapter = new MyAdapter();
lv.setAdapter(adapter);
new MyAsyncTask().execute(urlstr);
//数据加载完成后刷新适配器(5分)
adapter.notifyDataSetChanged();
}
private void setListener() {
dl_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//关闭drawer
drawer.closeDrawer(dl_lv);
}
});
}
private void initView() {
drawer = findViewById(R.id.drawer);
dl_lv = findViewById(R.id.dl_lv);
lv = findViewById(R.id.lv);
}
private void initData() {
ArrayList<String> lists = new ArrayList<>();
for (int i = 0 ; i <4 ; i++){
lists.add(dlStr[i]);
}
ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, lists);
dl_lv.setAdapter(stringArrayAdapter);
}
//去除json串的不合格
private String doStr(String str) {
String str1 = str.replace("content(","").replace(");","");
return str1;
}
class MyAsyncTask extends AsyncTask<String,Void,String> {
//子线程方法,进行联网操作
@Override
protected String doInBackground(String... strings) {
String s = strings[0];
//直接用工具类获取json
String netJson = NetUtils.getNetJson(s);
String replace = netJson.replace("content(", "").replace(");", "");
return replace;//返回给(前台方法,主线程方法onPostExecute)
}
//主线程方法,可以直接进行更新UI
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
JavaBean javaBean = gson.fromJson(s, JavaBean.class);
JavaBean.DataBean data = javaBean.getData();
content = data.getContent();
list.addAll(content);
adapter.notifyDataSetChanged();
}
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int itemViewType = getItemViewType(i);
switch (itemViewType){
case 0:
ViewHolder1 holder = null;
if(view==null){
holder = new ViewHolder1();
view = View.inflate(MainActivity.this, R.layout.lv_item, null);
holder.lv_tv1 = (TextView) view.findViewById(R.id.lv_tv1);
view.setTag(holder);
}else{
holder = (ViewHolder1) view.getTag();
}
holder.lv_tv1.setText(list.get(i).getSubtitle());
// ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder.i);
break;
case 1:
ViewHolder2 holder2 = null;
if(view==null){
holder2 = new ViewHolder2();
view = View.inflate(MainActivity.this, R.layout.lv_item2, null);
holder2.lv_tv2 = (TextView) view.findViewById(R.id.lv_tv2);
holder2.lv_img2 = (ImageView) view.findViewById(R.id.lv_img2);
view.setTag(holder2);
}else{
holder2 = (ViewHolder2) view.getTag();
}
holder2.lv_tv2.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder2.lv_img2);
break;
}
return view;
}
//重写适配器的多条目加载方法(5分)
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
String vplus_pic = content.get(position).getVplus_pic();
//根据vplus_pic的有无进行判断,返回两种类型(5分)
if(vplus_pic == null ){
return 0;
}else {
return 1;
}
}
}
class ViewHolder1{
TextView lv_tv1;
}
class ViewHolder2{
TextView lv_tv2;
ImageView lv_img2;
}
}
实现如图所示效果,使用DrawerLayout实现页面左侧滑出,页面左侧抽屉页面包含头像和4个条目,图片可以使用小机器人图标,右侧内容显示列表,从以下接口地址获取网络数据:
http://data.v.qq.com/videocms/getNewsvideoList.php?ref=pclient&appkey=6UkwV9DeHr9_PC&vsite=new_vshou&ename=new_vs_feature&report=web.news&_=1504358456351
注意:获取接口的数据需要用字符串替换的方式去除掉最前面的“content(”和最后面“);”只保留content()中间的json数据。
获取到网络数据后根据有无“vplus_pic”字段进行多条目加载,当没有vplus_pic字段时,列表条目只显示标题文字,有vplus_pic字段时,列表条目显示图片,图片地址即为vplus_pic中获取的值。
使用Universal-Image-Loader加载图片,全局配置Universal-Image-Loader,设置加载中和加载失败时的图片为小机器人,设置开启内存缓存和磁盘缓存,设置加载图片的线程数为3。
实现思路:
1.整体布局使用DrawerLayout(5分),DrawerLauout的抽屉页面包含上方的头像和下方的4个条目(5分)
2.封装网络请求工具类(5分),进入页面后,开启子线程,在子线程中调用网络请求获取数据(5分)
3.获取到网络数据之后,进行字符串替换(5分),替换后的数据进行解析(5分),解析后的数据回调到主线程中(5分)
4.为ListView添加适配器,传入解析后的数据(5分),重写自定义适配器的几个重要方法(5分)
5.重写适配器的多条目加载方法(5分),根据vplus_pic的有无进行判断,返回两种类型(5分)
6.提供多条目加载的两种布局文件,在获取条目视图的方法中根据类型进行加载(5分)
7.Application中全局初始化Universal-Image-Loader(5分),设置加载中和加载失败的图片(5分),配置开启磁盘缓存和内存缓存(5分),配置加载图片的线程数(5分)
8.适配器中使用Universal-Image-Loader进行加载图片(5分)
9.数据加载完成后刷新适配器(5分)
10.要求:
项目名称命名规范,姓名+时间,例:张三,项目名称为-Zhangsan20171113,项目包名为com.bwie.姓名全拼(5分),功能代码模块中加入注释。(5分)
MainActivity
package com.bwei.lifangxin20171113;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.ArrayList;
import java.util.List;
/**
* 1.整体布局使用DrawerLayout(5分),DrawerLauout的抽屉页面包含上方的头像和下方的4个条目(5分)
*2.2,进入页面后,开启子线程,在子线程中调用网络请求获取数据(5分)
*/
public class MainActivity extends AppCompatActivity {
String urlstr="http://data.v.qq.com/videocms/getNewsvideoList.php?ref=pclient&appkey=6UkwV9DeHr9_PC&vsite=new_vshou&ename=new_vs_feature&report=web.news&_=1504358456351";
private DrawerLayout drawer;
private ListView dl_lv;
private ListView lv;
List<JavaBean.DataBean.ContentBean> list = new ArrayList<>();
String dlStr[] = {"客服热线","营业部网点","系统设置","换肤"};
private String s;
private List<JavaBean.DataBean.ContentBean> content;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//判断网络
// NetUtils.getNetType(this);
//使用butterKnife来注解控件;
//ButterKnife.bind(this);
//初始化布局和试图
initView();
//初始化DrawerLayout数据
initData();
//给Item设置点击事件 关闭侧滑
setListener();
//开启子线程,在子线程中调用网络请求获取数据
// startThread();
//为ListView添加适配器,传入解析后的数据(5分),重写自定义适配器的几个重要方法(5分)
adapter = new MyAdapter();
lv.setAdapter(adapter);
new MyAsyncTask().execute(urlstr);
//数据加载完成后刷新适配器(5分)
adapter.notifyDataSetChanged();
}
private void setListener() {
dl_lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//关闭drawer
drawer.closeDrawer(dl_lv);
}
});
}
private void initView() {
drawer = findViewById(R.id.drawer);
dl_lv = findViewById(R.id.dl_lv);
lv = findViewById(R.id.lv);
}
private void initData() {
ArrayList<String> lists = new ArrayList<>();
for (int i = 0 ; i <4 ; i++){
lists.add(dlStr[i]);
}
ArrayAdapter<String> stringArrayAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1, lists);
dl_lv.setAdapter(stringArrayAdapter);
}
//去除json串的不合格
private String doStr(String str) {
String str1 = str.replace("content(","").replace(");","");
return str1;
}
class MyAsyncTask extends AsyncTask<String,Void,String> {
//子线程方法,进行联网操作
@Override
protected String doInBackground(String... strings) {
String s = strings[0];
//直接用工具类获取json
String netJson = NetUtils.getNetJson(s);
String replace = netJson.replace("content(", "").replace(");", "");
return replace;//返回给(前台方法,主线程方法onPostExecute)
}
//主线程方法,可以直接进行更新UI
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
JavaBean javaBean = gson.fromJson(s, JavaBean.class);
JavaBean.DataBean data = javaBean.getData();
content = data.getContent();
list.addAll(content);
adapter.notifyDataSetChanged();
}
}
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
int itemViewType = getItemViewType(i);
switch (itemViewType){
case 0:
ViewHolder1 holder = null;
if(view==null){
holder = new ViewHolder1();
view = View.inflate(MainActivity.this, R.layout.lv_item, null);
holder.lv_tv1 = (TextView) view.findViewById(R.id.lv_tv1);
view.setTag(holder);
}else{
holder = (ViewHolder1) view.getTag();
}
holder.lv_tv1.setText(list.get(i).getSubtitle());
// ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder.i);
break;
case 1:
ViewHolder2 holder2 = null;
if(view==null){
holder2 = new ViewHolder2();
view = View.inflate(MainActivity.this, R.layout.lv_item2, null);
holder2.lv_tv2 = (TextView) view.findViewById(R.id.lv_tv2);
holder2.lv_img2 = (ImageView) view.findViewById(R.id.lv_img2);
view.setTag(holder2);
}else{
holder2 = (ViewHolder2) view.getTag();
}
holder2.lv_tv2.setText(list.get(i).getTitle());
ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder2.lv_img2);
break;
}
return view;
}
//重写适配器的多条目加载方法(5分)
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
String vplus_pic = content.get(position).getVplus_pic();
//根据vplus_pic的有无进行判断,返回两种类型(5分)
if(vplus_pic == null ){
return 0;
}else {
return 1;
}
}
}
class ViewHolder1{
TextView lv_tv1;
}
class ViewHolder2{
TextView lv_tv2;
ImageView lv_img2;
}
}
阅读全文
0 0
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- OkHttp请求网络数据,并listview展示
- MVP获取网络数据并展示
- 解析网络json数据并展示到ListView上
- listview网络请求数据并实现多条目展示
- 获取网络数据进行Gson解析用ListView展示
- ListView多条目展示 请求网络数据 和图片
- 网络访问数据并展示
- ListView展示 网络请求的数据, 并LoaderImage请求网络图片
- 网络请求并展示到ListView上
- 获取网络图片展示到ListView上
- android网络数据获取与解析+RecyclerView数据展示实现ListView、GridView、瀑布流切换
- Android 获取XML网络数据并绑定到ListView
- 从网络获取数据,并绑定到listview上
- 联网获取json数据,进行解析,并使用listview展示出来
- Json解析网络数据+listview展示跳转
- Android_请求网络数据展示到Listview
- 记录SpringBoot使用Druid和Mybatis配置
- python文件的打开
- Android的五种布局模式
- 深入理解stm32f407之FSMC
- c语言小题目练习
- WEEK2--DrawerLayout 和 ListView 获取网络数据并展示
- linux qt opencv安装配置详细版
- UserProfile扩展Django原有用户(管理)信息
- spring+hibernate 两种整合方式配置文件
- 当前和未来重要的大数据优势
- 【Scikit-Learn 中文文档】内核岭回归
- [Tensorflow]Sharing Variables 共享权值【tf.get_variable 和 tf.variable_scope】
- 【操作系统】系统中断技术
- 夏泽网