package com.fmy.homework;

import java.util.List;

import com.fmy.homework.httputil.HttpUtil;
import com.fmy.homework.myadapter.MyAdpter;
import com.fmy.homework.parsexml.ParseXmlUtil; import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.TextView; public class MainActivity extends Activity { private ListView lv;
private TextView tv; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
tv = (TextView) findViewById(R.id.tv);
//设置当List没有条目显示此控件 如果有隐藏此控件
//注意头尾视图不包含在内 意思说哪怕有头尾视图但没有实际条目依然为空
lv.setEmptyView(tv);
//创建一个布局填充器
LayoutInflater inflater = getLayoutInflater();
//把布局文件填充为一个View
View head = inflater.inflate(R.layout.head, null);
//把布局文件填充为一个View
View foot = inflater.inflate(R.layout.foot, null); //添加头试图
lv.addHeaderView(head); //添加尾视图
lv.addFooterView(foot);
//启动异步任务
new MyAsync().execute("http://c.m.163.com/nc/article/list/T1348648517839/0-20.html");
} class MyAsync extends AsyncTask<String, Void, List<String>>{ @Override
protected List<String> doInBackground(String... params) {
String json = HttpUtil.conn(params[0]); return ParseXmlUtil.parse(json);
} @Override
protected void onPostExecute(List<String> result) {
super.onPostExecute(result);
MyAdpter myAdpter = new MyAdpter(result, MainActivity.this);
lv.setAdapter(myAdpter);
//如果lv中某个条目设置setOnClickListener
//那么本方式和长按方法不生效
lv.setOnItemClickListener(new OnItemClickListener() {
/**
* 第一个参数 ListView
* 第二个参数当前条目的View
* 当前条目的位置包括头试图的位置 比如说头试图(headView) 的值是0 调用的是适配器中:getItem
* 当前实际内容条目的ID 如果直接返回的是postion的话 那么返回的是实际条目内容地址
* 接上:不包括头试图和尾视图 两者的返回值是 -1 调用的是适配器中:getItemId
*/
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { }
});
//按下的时间是0.18s 触发
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
/**
* 第一个参数 ListView
* 第二个参数当前条目的View
* 当前条目的位置包括头试图的位置 比如说头试图(headView) 的值是0 调用的是适配器中:getItem
* 当前实际内容条目的ID 如果直接返回的是postion的话 那么返回的是实际条目内容地址
* 接上:不包括头试图和尾视图 两者的返回值是 -1 调用的是适配器中:getItemId
*/
/*
* 这里的返回值 :如果是false 长按之后还会触发短按监听
* */
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
return false;
}
}); } } }
package com.fmy.homework.httputil;

import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject; public class HttpUtil { static public String conn(String url){
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000*5);
HttpGet get = new HttpGet(url);
try {
HttpResponse response = client.execute(get);
if (response.getStatusLine().getStatusCode()==200){
return EntityUtils.toString(response.getEntity());
}
} catch (Exception e) {
e.printStackTrace();
}
return url;
}
}
package com.fmy.homework.myadapter;

import java.util.List;

import com.fmy.homework.R;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; public class MyAdpter extends BaseAdapter { //每个item中要显示的数据
List<String> list = null;
//传入的上下文 方便后面用布局填充器
Context context = null; public MyAdpter(List<String> list, Context context) {
super();
this.list = list;
this.context = context;
} // 返回列表中所有数量
// 如果设置为1 那么列表将只有一个item (只有一行)
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} // 返回每个显示内容的位置 如果同时设置头(headView)和尾试图(footView)
// 也包含在内 所以 头的数值为:0 总大小比getCount+2
@Override
public Object getItem(int position) {
return position;
} // 返回内容的每个条目的id 如果没有直接返回 positon那么将直接返回实际内容
// 头(headView)和尾试图(footView) 返回-1 其他正常显示
@Override
public long getItemId(int position) {
return position;
} /*
* position 实际内容位置(不包含头尾): convertView 每个条目的缓存 parent指代listView
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
viewHold hold =null;
// 判断缓存是否为空
if (convertView == null) {
//生成布局填充器
LayoutInflater Inflater = LayoutInflater.from(context);
//用填充器生成一个view对象
/**
* 第一个参数 :需要从布局文件转化为view的id
* 第二个参数:ListView对象
* 第三个参数:是否追加 填充对象的父级 如果为true 生成的条目将会有两个布局(ListView 转化的布局文件) 会直接奔溃
*/
view = Inflater.inflate(android.R.layout.simple_spinner_item, parent,false); //生成一个存放view子空间的id 省去下次遍历id带来的消耗
hold = new viewHold(); //给hold放入子控件对象
hold.tv = (TextView) view; //将hold装入view中
view.setTag(hold);
}else{
//如果存在缓存 从缓存中拿出即可
view = convertView;
//拿出存放控件id的类
hold = (viewHold) view.getTag();
} //设置样式
hold.tv.setText(list.get(position));
return view;
} // 保存缓存item子控件的id
// 到用时候不用重新findView(此方法遍历整个id文件比较浪费资源)
class viewHold {
TextView tv;
}
}
package com.fmy.homework.parsexml;

import java.util.ArrayList;
import java.util.List; import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject; public class ParseXmlUtil { static public List<String> parse(String json){
List<String> list= new ArrayList<String>();
try {
JSONObject root = new JSONObject(json);
JSONArray jsonArray = root.getJSONArray("T1348648517839");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String string = jsonObject.getString("title");
list.add(string);
}
return list;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}

08 ListView 优化的例子的更多相关文章

  1. 08 ListView 优化

    ListVie的优化 1 固定ListView长宽高 如下图在清单文件中: <ListView android:id="@+id/lv" android:layout_wid ...

  2. listview优化 汇总

    1,listview加载性能优化ViewHolder 转自: http://blog.csdn.net/jacman/article/details/7087995 在android开发中Listvi ...

  3. Android——ListView优化

    1.ListView基本概念 列表显示需要三个元素: ListView:用来展示列表的View. 适配器:用来把数据映射到ListView上 数据:具体的将被映射的字符串,图片或基本组件 适配器类型分 ...

  4. Adaptert Listview 优化

    这次是关于Listview的优化的,之前一直采用愚蠢的方式来使用listview,出现的情况就是数据多的话下拉的时候会出现卡顿的情况,内存占用多.所以学习了关于listview的优化,并且这也是普遍使 ...

  5. Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固

    1.常驻型广播  常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到.  他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...

  6. sql优化经典例子

    场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据10 ...

  7. 内存泄露--contentView缓存使用与ListView优化

    引起Android内存泄露有很多种原因,下面罗列了一些问题,以后会一一解决 1.构造Adapter时没有使用缓存convertView(衍生出ListView优化问题) 2.查询数据库游标没有关闭 3 ...

  8. Android零基础入门第43节:ListView优化和列表首尾使用

    原文:Android零基础入门第43节:ListView优化和列表首尾使用 前面连续几期都在学习ListView的各种使用方法,如果细心的同学可能会发现其运行效率是有待提高的,那么本期就来一起学习有哪 ...

  9. Android开发之ListView详解 以及简单的listView优化

    ListView列表视图 最常用的控件之一,使用场景例如:微信,手机QQ等等. android:divider:每个item之间的分割线,可以使用图片或者色值. android:dividerHeig ...

随机推荐

  1. poj3185 高斯消元

    The Water Bowls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5329   Accepted: 2081 D ...

  2. [bzoj4881][Lydsy2017年5月月赛]线段游戏

    来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...

  3. NOIWC颓废记

    NOIWC大概就干了3件事情:吃.睡.浪. 吃: 目测绍兴一中的饭比二中的好吃多了,每天都有挺多的肉菜,还有一些甜品,而且是自助,不错的,但是一个不好的是排队时间太长了,于是我这么珍惜时间急着回宿舍的 ...

  4. 如何用git命令生成Patch和打Patch

    在程序员的日常开发与合作过程中,对于code的生成patch和打patch(应用patch)成为经常需要做的事情.什么是patch?简单来讲,patch中存储的是你对代码的修改,生成patch就是记录 ...

  5. json字符串转json对象,json对象转换成java对象

    @RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST) @Resp ...

  6. h5 网页版的微博微信QQ登录

    一:微博 1,先说微博吧,首先你的去http://open.weibo.com/wiki/先注册账号,通过验证审核.然后的创建网页应用.微博审核不通过的原因就是域名和网站地址,一定要按实际写的.一定要 ...

  7. vue 组件按需引用,vue-router懒加载,vue打包优化,加载动画

    当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的 异步 ...

  8. SUSE10的虚拟机安装以及ORACLE 11g的安装

    SUSE10虚拟机安装与ORACLE安装 作者:张欣橙 本文所需要的所有参数均位于文末附录中 一.SUSE10虚拟机的安装与创建 新建虚拟机安装 选择下一步 选择下一步 选择下一步 选择下一步 选择下 ...

  9. UMAIL安装教程

    UMAIL安装教程 一.UMAIL虚拟机的创建与安装 首先在VM中选择新建虚拟机 选择下一步 选择稍后安装操作系统 选择Linux系统 版本CentOS 7 64位 选择名称与安装位置 选择下一步 选 ...

  10. 闭关修炼屯题中,期末考完A

    FJUTOJ 1279 #include <cstdio> #include <iostream> #include <algorithm> #include &l ...