文章传送门:
http://blog.csdn.net/xys289187120/article/details/6636139
ListView原理:
http://blog.csdn.net/hhq163/article/details/8132723
其中的第四项demo 我发现有一个相当明显的bug
注:说实话,我已经记不清bug的详细了,调试调飞了!
Bugs:两只
Bug 描述:ListvView (由ListActivity实现)往下划屏时,无法正确响应单点事件。
抛出异常:java.lang.NullPointerException
初步分析:BaseAadaper 的GetView方法重写没有处理由划屏引发的ListvView重绘(简而言之,便是 这货没有按照ListView原理进行高效准确响应)
Bug 描述:ListvView (由ListActivity实现)往下划屏时,无法正确响应实现单击高亮选中项
抛出异常:java.lang.NullPointerException
初步分析:没有记录选择项位置“[position]” 而且GetView没有正确处理"[position]"的重绘请求(这里需要参看ListView原理,并深入理解)
解决方案:
注意:目前为止,没有发现有bug!如有bug提交,请通知我!
或者 您有什么先进的算法 和想象 请不吝赐教
import android.app.ListActivity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class ListViewLibrayActivity extends ListActivity {
private int mIndex;//选择项纪录
private String[] mListTitle = { "姓名", "性别", "年龄", "居住地","邮箱"};
private String[] mListStr = { "Syudf", "男", "4792", "地球",
":)@earth.com" };
ListView mListView = null;
MyListAdapter myAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
mListView = getListView();
myAdapter = new MyListAdapter(ListViewLibrayActivity.this);
setListAdapter(myAdapter);
mIndex=-1;//未选中
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position,
long id) {
for (int i = 0; i < adapterView.getCount(); i++) {
View v=adapterView.getChildAt(i);
if (i==position) {
mIndex = position; //记录当前选择项
v.setBackgroundColor(Color.BLACK);//设置当前选中项背景
} else {
v.setBackgroundColor(Color.BLUE);//设置其他未选择项背景
}
}
}
});
super.onCreate(savedInstanceState);
}
class MyListAdapter extends BaseAdapter {
public MyListAdapter(Context context) {
mContext = context;
}
public int getCount() {
return mListStr.length;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
VeiwHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null);
holder = new VeiwHolder();
holder.iamge = (ImageView) convertView.findViewById(R.id.imageView1);
holder.title =(TextView) convertView.findViewById(R.id.textViewName);
holder.text= (TextView) convertView.findViewById(R.id.textViewSex);
convertView.setTag(holder);
}else {
holder = (VeiwHolder) convertView.getTag();
}
if (mIndex==position) {
convertView.setBackgroundColor(Color.BLACK);//选中项的重绘背景
}else {
convertView.setBackgroundColor(Color.BLUE);//未选中项的重绘背景
}
holder.title.setText(mListTitle[position]);
holder.text.setText(mListStr[position]);
holder. iamge.setImageResource(R.drawable.list);
return convertView;
}
private Context mContext=null;
}
}
class VeiwHolder{
ImageView iamge;
TextView title ;
TextView text ;
}
友情提示:
转换字符串为颜色值 设置背景色
比如
listview.setBackgroundColor(Color.parseColor("#F0FFFF") ); // Azure 天蓝色
i
tem.xml 文件可以根据个人喜好适当自定义布局(我是用的RelativeLayout布局方式)
作为您看到这里的感谢,赠送上两则您可能需要的网页地址:
传送您到cnblogs.com 农民伯伯 Android API中文 (42)ListView
传送门:http://www.cnblogs.com/over140/archive/2010/11/19/1881445.html
传送您到CSDN.NET博客 Android 的color值语句 setBackgroundColor(Color.parseColor("x") );用得上
传送门:http://blog.csdn.net/xinke87/article/details/6675114