我正在使用自定義適配器來定義ListView
的項目。每個項目都是一個帖子(就像論壇),由我的數據庫中的idpost定義,並允許用戶將該帖子標記爲收藏,編輯並刪除它(如果用戶是帖子的作者)。使用自定義適配器在ListView中動態更改圖標
我有麻煩來開發此行爲。這是我的適配器到目前爲止。
public class ComentAdapter extends BaseAdapter {
private List<Comentario> mDataset;
private LayoutInflater mLayoutInflater;
private Context mContext;
public class ViewHolder {
public ImageView imAvatar;
public TextView tvAutor;
public TextView tvDestinatario;
public TextView tvFecha;
public TextView tvContenido;
public TextView tvArchivo;
public TextView tvRespuestas;
public ImageView imFav;
public ImageView imEditar;
public ImageView imBorrar;
}
public ComentAdapter(Context context, List<Comentario> items) {
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
mDataset = items;
}
public void setDataset(List<Comentario> newDataset) {
mDataset = newDataset;
}
@Override
public int getCount() {
return mDataset.size();
}
@Override
public Comentario getItem(int position) {
return mDataset.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.comentario_list_item, parent, false);
holder = new ViewHolder();
holder.imAvatar = (ImageView) convertView.findViewById(R.id.imAvatar);
holder.tvAutor = (TextView) convertView.findViewById(R.id.tvAutor);
holder.tvDestinatario = (TextView) convertView.findViewById(R.id.tvDestinatario);
holder.tvFecha = (TextView) convertView.findViewById(R.id.tvFecha);
holder.tvContenido = (TextView) convertView.findViewById(R.id.tvContenido);
holder.tvArchivo = (TextView) convertView.findViewById(R.id.tvArchivo);
holder.tvRespuestas = (TextView) convertView.findViewById(R.id.tvRespuestas);
holder.imFav = (ImageView) convertView.findViewById(R.id.imFav);
holder.imEditar = (ImageView) convertView.findViewById(R.id.imEditar);
holder.imBorrar = (ImageView) convertView.findViewById(R.id.imBorrar);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
Picasso.with(mContext).load(getItem(position).getFoto_autor()).into(holder.imAvatar);
return convertView;
}
}
當ImageView
imFav被點擊我要標記/取消該崗位作爲在DB的喜愛和更改圖標。此作品,展示(只return convertView;
之前)idpost:
// idcomentario is the idpost I mentioned
holder.imFav.setTag(getItem(position).idcomentario);
holder.imFav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, "" + holder.imFav.getTag(), Toast.LENGTH_SHORT).show();
}
});
但我有一些麻煩的時候我想改變德圖標。我想這兩個解決方案(上述onClick(View v)
方法中):
((ImageView) v).setImageResource(R.drawable.ic_star_relleno);
而且
holder.imFav.setImageResource(R.drawable.ic_star_relleno);
圖標的變化,但這種變化被錯過的ListView滾動時。我知道我有這樣的通知的變化:
adapter.notifyDataSetChanged();
但我不能在這裏使用adapter
,它應該是在我activity.java我猜。所以我試着在我的item_layout.xml中設置onClick。
<ImageView
android:id="@+id/imFav"
...
android:onClick="onClickFav" />
而在activity.java
public void onClickFav(View v) {
((ImageView) v).setImageResource(R.drawable.ic_star_relleno);
mAdapter.notifyDataSetChanged();
}
但是,這並不工作。沒有什麼變化。
有誰知道如何使這個作品?這是我的主要問題,但我也想知道是否有任何方法可以將所有OnClickListener管理出適配器。在activity.java中,甚至更好,在一個新的類中?
對不起,讓這篇文章很長,但我想盡可能多地公開信息。
必須更新mDataset基礎數據。因爲當列表中的項目滾動時,它通過適配器從您的mDataset重新加載 – ant