[英]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.