изменить ресурс кнопки изображения в списке

Я работаю над простым приложением для чтения каналов. в моей основной деятельности у меня есть список, который показывает все элементы. в каждой строке у меня есть кнопка изображения для сохранения этого элемента, и когда пользователь нажимает на нее, изображение кнопки изображения должно измениться (например, значок избранного в твиттере), но оно не меняется! После прокрутки изменений не наблюдается!

это мой макет строки.

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants" >

<TextView
    android:id="@+id/tvListViewItemTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="15dp"
    android:layout_marginTop="15dp"
    android:text="@string/listview_item_title"
    android:textSize="25dp" />

<TextView
    android:id="@+id/tvListViewItemText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/tvListViewItemTitle"
    android:layout_below="@+id/tvListViewItemTitle"
    android:layout_marginTop="20dp"
    android:text="@string/listview_item_text"
    android:textSize="18dp" />

<TextView
    android:id="@+id/tvListViewItemTime"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/tvListViewItemText"
    android:layout_below="@+id/tvListViewItemText"
    android:layout_marginTop="22dp"
    android:paddingTop="5dp"
    android:text="@string/listview_item_time" />

<ImageButton
    android:id="@+id/ibListViewItemSave"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignTop="@+id/tvListViewItemTime"
    android:layout_marginLeft="20dp"
    android:paddingTop="11dp"
    android:src="@drawable/icon_save_story_2x"
    android:background="@null" />

and this is my custom adapter class.

public class FeedListAdapter extends ArrayAdapter<FeedItem> {
private final Activity context;
private final List<FeedItem> list;

public FeedListAdapter(Activity context, List<FeedItem> list) {
    super(context, R.layout.feed_listview_item_type1, list);
    this.context = context;
    this.list = list;
}

static class ViewHolder {
    TextView tvTitle;
    TextView tvText;
    TextView tvTime;
    ImageButton ibSave;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rowView = convertView;

    if (rowView == null) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.feed_listview_item_type1, parent,false);
        // configure view holder
        ViewHolder holder = new ViewHolder();

        holder.tvTitle = (TextView)rowView.findViewById(R.id.tvListViewItemTitle);
        holder.tvText = (TextView)rowView.findViewById(R.id.tvListViewItemText);
        holder.tvTime = (TextView)rowView.findViewById(R.id.tvListViewItemTime);
        holder.ibSave = (ImageButton)rowView.findViewById(R.id.ibListViewItemSave);

        rowView.setTag(holder);
    }
    // fill data
    ViewHolder holder = (ViewHolder) rowView.getTag();
    final FeedItem feedItem = list.get(position);
    holder.tvTitle.setText(feedItem.getTitle());
    holder.tvText.setText(feedItem.getText());
    holder.tvTime.setText(feedItem.getTime());


    if(feedItem.isSave()) holder.ibSave.setImageResource(R.drawable.icon_saved_story_2x);
    else holder.ibSave.setImageResource(R.drawable.icon_save_story_2x);

    final String msg = " "+(position+1);
    holder.ibSave.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if(feedItem.isSave()){
                feedItem.setSave(false);
                Toast.makeText(context,
                        msg+"deleted", Toast.LENGTH_SHORT).show();
                //holder.ibSave.setImageResource(R.drawable.icon_save_story_2x);
            }else{
                feedItem.setSave(true);
                Toast.makeText(context,
                        msg+"saved", Toast.LENGTH_SHORT).show();
                //holder.ibSave.setImageResource(R.drawable.icon_saved_story_2x);
            }

        }
    });
    return rowView;
}

}


person user2549089    schedule 26.07.2014    source источник


Ответы (1)


Позвоните notifyDataSetChanged в свой onClick после if else.

В настоящее время FeedListAdapter не понимает, что вы внесли некоторые изменения в list

person Apoorv    schedule 26.07.2014