簡體   English   中英

在ListView中滾動時保留“圖像”按鈕的圖像

[英]Keep Image of Image Button when scrolling in ListView

在我的列表視圖中實現“標記為收藏夾”功能時遇到問題。 我在每個listview項的右側放置了一個ImageButton,“單擊時”我想更改按鈕的圖像。 它看起來應該像這樣:

在此處輸入圖片說明

這很容易實現,並且工作得很好。 現在的問題是,當我滾動列表時,選定的圖像按鈕(星號)將保持不變。

保留對listview項的選擇並不難,但是將更改后的圖像保留在列表中對我來說是一個問題。 前者可以通過以下方式實現: https : //stackoverflow.com/a/9281155/2054118

所以我嘗試了類似的東西。 在getView()方法中,我初始化了我的imagebutton及其OnClickListener,以將實際位置保存在LinkedList中。 所選ImageButton的所有位置都應在列表中:

MyAdapter.java:

private LinkedList<Integer> selectedIndeces;

...

private static class ViewHolder {
    ...
    public ImageButton favoriteButton;
}

public void changeSelectedPositions(int pos) {
    int index = this.selectedIndeces.indexOf(pos);
    if (index != -1) {
        // image button in this row was selected
        this.selectedIndeces.remove(index);
    } else {
        // mark position of the image button as selected
        this.selectedIndeces.add(pos);
    }
    notifyDataSetChanged();
}

...

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    View rowView = convertView;

    // reuse views
    if (rowView == null) {
        rowView = this.mInflater.inflate(R.layout.talk_list_child, null);
        // configure view holder
        ViewHolder viewHolder = new ViewHolder();

        ...

        ImageButton ib = (ImageButton) rowView.findViewById(R.id.ib_favorite);
        ib.setFocusable(false);
        ib.setFocusableInTouchMode(false);
        ib.setOnClickListener(new OnClickListener() {
            public void onClick(View button) {
                // Set the button's appearance
                button.setSelected(!button.isSelected());
                changeSelectedPositions(position);
            }
        });
        viewHolder.favoriteButton = ib;
    }

    // fill data
    ViewHolder holder = (ViewHolder) rowView.getTag();

    ...

    if (selectedIndeces.contains(position)) {
        holder.favoriteButton.setImageResource(R.drawable.fav_selected);
    } else {
        holder.favoriteButton.setImageResource(R.drawable.fav_unselected);
    }

}

但是問題是我在getView()中獲得的位置並不總是相同,並且取決於列表滾動到的位置?

因此,為了簡化我的問題:即使滾動,如何將ImageButton的選擇/圖像保留在ListView中?

您在准備viewHolder保存了職位。 然后,在滾動之后,將回收視圖,並使用具有先前存儲位置的相同viewHolder 您每次調用getView()都可以設置偵聽器。

移動

ib.setOnClickListener(new OnClickListener() {
    public void onClick(View button) {
        // Set the button's appearance
        button.setSelected(!button.isSelected());
        changeSelectedPositions(position);
    }
});

就在之前

if (selectedIndeces.contains(position)) {
  1. 保留一個數組列表以保存在適配器中單擊的位置

    iconClickedPostion = new ArrayList();

  2. 只要您單擊列表中的圖像按鈕,就將列表視圖的位置添加到arraylist中。

    iconClickedPostion.add(position);

  3. 在getView()中,檢查條件是否已單擊,然后設置所需的圖像。

    if(iconClickedPostion.contains(position)){completedIcon.setImageResource(R.drawable.ic_done); }其他{completedIcon.setImageResource(iconId [position]); }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM