最近项目ListView浏览时候用改变颜色来记录选中行,网上Baidu,Google了好久,最后结合网上资料和自己的实践,
终于成功实现了功能!效果图如下:
具体的代码如下:
1、ListView的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include layout="@layout/title_left_button"/>
<RelativeLayout
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include android:id="@+id/cusExp_Item_progress" layout="@layout/progress"/>
<com.jemsn.util.ScrollListView_ExpView
android:id="@+id/CusExp_items_Detail"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@android:color/transparent"
android:cacheColorHint="#00000000"
android:focusableInTouchMode="true"
/>
</RelativeLayout>
</LinearLayout>
其中加红色的一定要加上去,否则得不到我们想要的效果!
2、DataAdpter 的代码如下:
class ScrollListViewAdapter extends BaseAdapter {
List<CustomerExpItem> newsItems;
public ScrollListViewAdapter(List<CustomerExpItem> newsitems) {
this.newsItems = newsitems;
}
@Override
public int getCount() {
return newsItems.size();
}
@Override
public Object getItem(int position) {
return newsItems.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout view = new LinearLayout(getApplicationContext());
view.setOrientation(LinearLayout.HORIZONTAL);
ViewHolder viewHolder=null;
if (convertView == null) {
viewHolder = new ViewHolder();
// 固定的列
View viewFix = getLayoutInflater().inflate(
R.layout.expdetail_list_fix_items, parent, false);
// 可以滑动的列(Layout的根布局必须是LinearLayout,原因不明)
View viewMovable = getLayoutInflater().inflate(
R.layout.expdetail_list_movable_items, parent, false);
view.addView(viewFix);
view.addView(viewMovable);
viewHolder.fixTxt01 = (TextView) view
.findViewById(R.id.Exp_detail_SheetCode);
viewHolder.fixTxt02 = (TextView) view
.findViewById(R.id.Exp_detail_SheetDate);
view.setTag(viewHolder);
} else {
view = (LinearLayout) convertView;
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.fixTxt01.setText(newsItems.get(position).get_GdsName());
viewHolder.fixTxt02.setText(newsItems.get(position).get_GdsCode());
mArrayListMovable.add(view.getChildAt(1));
if (position == selectItem) {
viewHolder.fixTxt01.setTextColor(Color.GREEN);
viewHolder.fixTxt02.setTextColor(Color.GREEN);
} else {
viewHolder.fixTxt01.setTextColor(Color.WHITE);
viewHolder.fixTxt02.setTextColor(Color.parseColor("#40e0d0"));
}
return view;
}
public void addNewsItem(CustomerExpItem newsitem) {
newsItems.add(newsitem);
}
public void setSelectItem(int selectItem) {
this.selectItem = selectItem;
}
private int selectItem=-1;
}
}
其中红色的为关键的代码。
3、ListView行点击,选中的代码:
AdapterView.OnItemClickListener mLeftListOnItemClick = new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View view, int arg2,long arg3) {
adapter.setSelectItem(arg2);
adapter.notifyDataSetInvalidated(); };
好了我们只要再注册一下ListView的点击事件就可以了!我们还可以添加自己比如更换图片之类!