WEEK2--DrawerLayout 和 ListView 获取网络数据并展示

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;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值