簡體   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