[英]Change Background color of an item in ListView onscroll?
你好,我有一个listview包含很多项目,但是只有3个项目可见,我想在滚动列表后更改中间项目的背景颜色
我的Activity
实现AbsListView.OnScrollListener
并且我有2个覆盖方法,如下所示
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int firstVisibleRow = AccountList.getFirstVisiblePosition();
int lastVisibleRow = AccountList.getLastVisiblePosition();
int middleone = firstVisibleRow+1;
Account test = (Account) AccountList.getItemAtPosition(middleone);
// test is the item in the middle of listview
Log.i("", "" + middleone + "=" + test.getDescription());
}
我创建了帐户的数组列表和帐户列表的适配器帐户测试是中间项目
我把它设置为关键,因为我现在需要将背景色设置为“测试”这一行
请任何帮助希望我清楚我的问题,谢谢大家
首先谢谢大家
终于我找到了解决方案
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
wantedView.setBackgroundResource(R.drawable.background_shape);//or color but set background
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int middlePosition = AccountList.getFirstVisiblePosition()+1;
int firstPosition = AccountList.getFirstVisiblePosition() - AccountList.getHeaderViewsCount();
int middleChild = middlePosition - firstPosition;
if (middleChild < 0 || middleChild >= AccountList.getChildCount()) {
Log.w("TAG", " Unable to get view for desired position, because its not being displayed on screen");
return;
}
middleView = AccountList.getChildAt(middleChild);
middleView.setBackgroundColor(Color.WHITE);
}
祝大家好运:)
使您的[int middleone]成为全局变量(在onCreate()之前声明)
然后使用以下代码:
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
AccountList.get(middleone).setBackgroundColor(YOURCOLOR);
}
这是完成窍门的代码,
list.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
// TODO Auto-generated method stub
int pos = list.getFirstVisiblePosition();
LinearLayout layout = (LinearLayout) list.findViewWithTag(pos++);
layout.setBackgroundColor(Color.GREEN);
Log.v("inside", "inside" + layout.toString());
}
@Override
public void onScroll(AbsListView a,int arg1,int arg2,int arg3){
// TODO Auto-generated method stub
}
});
而getView看起来像
if(convertView==null){
LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
convertView = inflater.inflate(R.layout.layout, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.linear.setTag(position);
holder.tv1.setText(s[position]);
holder.tv2.setText(s1[position]);
请注意,最后我遇到了ClassCastException,但这是要走的路。 当您找到解决方法时,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.