安卓项目02:项目笔记及测试首页(listView、网络请求)

在安卓项目01中,搞定了app的名称、图标和启动页,现在是进入到首页MainActivity了;但我是出于学习Android状态,所以我需要有一个项目笔记,而且首页不能搞得像一个正常的项目那样,而是应该是各种测试demo的目录入口。所以,我需要一个项目笔记以及一个有很多跳转的测试首页布局。

本篇主要内容有:

1.在Android工程中添加项目笔记,以便记录项目开发过程中的各种杂事;
2.listView的几种写法;
3.搭建本地服务器及xml解析;
4.去除标题栏title;
5.Intent意图的传值及跳转

1.在Android工程中添加项目笔记

这个笔记的定位是项目笔记,所以我打算添加到项目的根文件夹下,操作步骤为:
1.在Android Studio中将项目路径切换到project目录下(左上角);
2.选中项目根文件夹(项目名称),右键New - File - 输入笔记名称 - 选择"Text"
然后就有一个记事本供记录项目笔记

2.listView的简单介绍

1.搭建listView

//注意:fastScrollEnabled 是实现快速滚动的
 

2.加载view

ListView lv = (ListView) findViewById(R.id.main_LV);

 //加载数据适配器
        //第一种:BaseAdapter(复杂cell常用)
        lv.setAdapter(new MyListAdapter());//BaseAdapter(复杂cell常用)
        //第二种:ArrayAdapter(简单文本cell)
//        twoArrayAdapterCell();
        //第三种:SimpleAdapter(数据结构简单时使用)
//        threeSimpleAdapterCell();

        //设置listView的点击事件
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                Log.d(TAG, "onItemClick: 点击了"+ position);
            }
        });
    }

第一种:BaseAdapter(复杂cell常用)

//布局文件:



    
    
    


 //第一种数据适配器:BaseAdapter(复杂cell常用)
    private class MyListAdapter extends BaseAdapter {
        @Override
        public int getCount() {//有几条
            return listArr.size();
        }

        @Override
        public Object getItem(int position) {//不用管
            return null;
        }

        @Override
        public long getItemId(int position) {//不用管
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {//展示cell
            View view;
            if (convertView == null) {//没有就创建
                //创建新的view对象,可以通过打气筒把一个布局资源转换成一个view对象
                //获取打气筒的第一种方法:
//              view = View.inflate(getApplicationContext(), R.layout.lvcell1, null);
                //获取打气筒的第二种方法:
//              view = LayoutInflater.from(getApplicationContext()).inflate( R.layout.lvcell1, null);
                //获取打气筒的第三种方法:(最常用,最底层)
                LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.lvcell1, null);
            } else {//若有就复用
                view = convertView;
            }
            //获取控件
            SmartImageView img = (SmartImageView) view.findViewById(R.id.lvcell1_icon);
            TextView title_tv = (TextView) view.findViewById(R.id.lvcell1_title);
            TextView msg_tv = (TextView) view.findViewById(R.id.lvcell1_msg);
            //赋值
            img.setImageUrl(listArr.get(position).getImg(), R.drawable.test_icon);
            title_tv.setText(listArr.get(position).getTitle());
            msg_tv.setText(listArr.get(position).getDesc());

            return view;
        }
    }

//第二种:ArrayAdapter(简单文本cell)

//布局文件:



    


 //第二种数据适配器:ArrayAdapter(简单文本cell)
    private void twoArrayAdapterCell() {
        String titleArr[] = {"1", "2", "3", "4", "5", "6"};
        ArrayAdapter adapter = new ArrayAdapter(this, R.layout.lvcell2, R.id.lvcell2_title, titleArr);
        lv.setAdapter(adapter);
    }

第三种:SimpleAdapter(数据结构简单时使用)

//布局文件



   

   


  //第三种数据适配器:SimpleAdapter(数据结构简单时使用)
   private void threeSimpleAdapterCell() {
       //创建4条数据
       Map map1 = new HashMap();
       map1.put("name", "张三");
       map1.put("phone", "13311111111");
       Map map2 = new HashMap();
       map2.put("name", "李四");
       map2.put("phone", "1344444444");
       Map map3 = new HashMap();
       map3.put("name", "王五");
       map3.put("phone", "1355555555");
       Map map4 = new HashMap();
       map4.put("name", "赵六");
       map4.put("phone", "1366666666");
       //把数据加入到集合中
       List> data = new ArrayList>();
       data.add(map1);
       data.add(map2);
       data.add(map3);
       data.add(map4);
       //设置数据适配器
       SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), data, R.layout.lvcell3, new String[]{"name", "phone"}, new int[]{R.id.lvcell3_name, R.id.lvcell3_phone});
       lv.setAdapter(adapter);
   }

3.搭建本地服务器及xml解析;

搭建本地Apache服务器: https://blog.csdn.net/u012198209/article/details/81457160

//从网络中获取ListView的数据
private void initListData() {
        new Thread() {
            public void run() {//开一个子线程
                try {
                    //记得开网络权限
                    //    /Users/huzhongcheng/Sites
                    String pathStr = "http://192.168.1.107/AndroidData/homeMenuData.xml";
                    URL url = new URL(pathStr);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("GET");
                    conn.setConnectTimeout(5000);
                    int code = conn.getResponseCode();
                    if (code == 200) {
                        Log.d(TAG, "run: 请求成功");
                        InputStream in = conn.getInputStream();//获取服务器返回的数据流
                        Log.d(TAG, "run: 数据流" + in);
                        //解析返回的xml数据
                        listArr = MainListXmlUtils.parserXml(in);
                        Log.d(TAG, "run: 数据为" + listArr);
                        //回主线程更新UI
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                lv.setAdapter(new MyListAdapter());
                            }
                        });
                    } else {
                        Log.d(TAG, "run: 请求失败");
                    }
                } catch (Exception e) {
                    Log.d(TAG, "run: 服务器异常");
                    e.printStackTrace();
                }
            };
        }.start();
    }


//数据model类
package com.biyu6.huzhongcheng.byandroidtest;

public class MainListModel {
    private String img;
    private String title;
    private String desc;

    public String getImg() {
        return img;
    }

    public void setImg(String img) {
        this.img = img;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}



//首页list的xml数据解析器
public class MainListXmlUtils {
    public static List parserXml(InputStream in) throws Exception {
        List listArr = null;
        MainListModel model = null;

        //获取xml解析器
        XmlPullParser parser = Xml.newPullParser();
        //设置解析器要解析的内容
        parser.setInput(in, "utf-8");
        //获取解析的事件类型
        int type = parser.getEventType();
        while (type != XmlPullParser.END_DOCUMENT) {
            switch (type) {
                case XmlPullParser.START_TAG://解析开始节点
                    //判断解析的是哪个开始标签
                    if ("channel".equals(parser.getName())) {
                        listArr = new ArrayList();
                    } else if ("item".equals(parser.getName())) {
                        model = new MainListModel();
                    } else if ("title".equals(parser.getName())) {
                        model.setTitle(parser.nextText());
                    } else if ("desc".equals(parser.getName())) {
                        model.setDesc(parser.nextText());
                    } else if ("img".equals(parser.getName())) {
                        model.setImg(parser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG://解析结束节点
                    if ("item".equals(parser.getName())) {
                        //把javabean添加到集合
                        listArr.add(model);
                        System.out.println("节点信息:" + model);
                    }
                    break;
                default:
                    break;
            }
            //不停的向下解析
            type = parser.next();
        }
        return listArr;
    }
}


//homeMenuData.xml资源文件内容:


    
        标题1:用ViewPager实现Tab
        代码都在一个Activity中,维护不便!
        http://192.168.1.107/AndroidData/Images/f1.png
    
    
        标题2:
        描述2:
        http://192.168.1.107/AndroidData/Images/k2.jpg
    
    
        标题3:
        描述3:
        http://192.168.1.107/AndroidData/Images/f2.jpg
    
    
        标题4:
        描述4:
        http://192.168.1.107/AndroidData/Images/s5.png
    


4.去除标题栏title;

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//Activity继承自AppCompatActivity时,用他去除标题栏title
//requestWindowFeature(Window.FEATURE_NO_TITLE); //Activity继承自FragmentActivity时,用他去除标题栏title
        setContentView(R.layout.activity_main);
        //加载view
        initView();
    }

5.Intent意图的传值及跳转

 //设置listView的点击事件
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                String titleStr = listArr.get(position).getTitle();
                Log.d(TAG, "onItemClick: 点击了"+ titleStr);
                switch (position) {
                    case 0:
                        //从当前跳转到TabViewPagerActivity的意图
                        Intent intent = new Intent(getApplicationContext(), TabViewPagerActivity.class);
                        /**意图传值
                         * Intent 能够以名为 extra 的键值对形式携带数据类型。
                             * 键是上面定义的公共常量 EXTRA_MESSAGE ,下一个 Activity 将用该键来检索文本值。
                             * 值是输入框中的值
                         */
                        intent.putExtra(EXTRA_MESSAGE,titleStr);
                        startActivity(intent);
                        break;
                    default:
                        Toast.makeText(MainActivity.this, "敬请期待!", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

你可能感兴趣的:(安卓项目02:项目笔记及测试首页(listView、网络请求))