繁体   English   中英

更改ListView滚动项目中背景的颜色?

[英]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]成为全局变量(在o​​nCreate()之前声明)

然后使用以下代码:

 @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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM