【发布时间】:2016-07-07 12:26:10
【问题描述】:
将位图从列表视图中的网络图像视图传递到片段时,我遇到了一些奇怪的行为。
我从列表视图适配器中的 url 加载图像,然后当点击列表视图项时,该列表视图中的图像然后用作片段中的背景。但是,当我这样做时,片段中显示了错误的图像,显示的图像是当前在屏幕上可见的列表视图底部的项目。
这是我的适配器设置列表视图:
public class EventListAdapter extends BaseAdapter {
Context context;
public static ArrayList<EventObject> eventList;
private LayoutInflater mInflater;
private Bitmap bitmap;
private NetworkImageView img_main;
private RelativeLayout layoutItem;
private TextView txt_event_name;
private TextView txt_event_details;
public EventListAdapter(Context context, ArrayList<EventObject> eventList) {
this.context = context;
this.eventList = eventList;
mInflater = LayoutInflater.from(context);
}
public void addItems(ArrayList<EventObject> eventList) {
this.eventList.addAll(eventList);
notifyDataSetChanged();
}
@Override
public int getCount() {
return eventList.size();
}
@Override
public Object getItem(int position) {
return eventList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@SuppressLint("all")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
try {
// reuse of convertView
if (convertView == null) {
layoutItem = (RelativeLayout) mInflater.inflate(R.layout.view_event_list_item, parent, false);
} else {
layoutItem = (RelativeLayout) convertView;
}
img_main = (NetworkImageView) layoutItem.findViewById(R.id.img_main);
txt_event_details = (TextView) layoutItem.findViewById(R.id.txt_event_details);
txt_event_name = (TextView) layoutItem.findViewById(R.id.txt_event_name);
txt_event_name.setTypeface(FontClass.getOpenSansRegular(context));
txt_event_details.setTypeface(FontClass.getOpenSansLight(context));
img_main.setDefaultImageResId(R.drawable.ic_weekends_matter_black);
img_main.setImageUrl(eventList.get(position).getImageUrl(), new ImageLoader(NetworkManager.getInstance().requestQueue, new LruBitmapCache()));
txt_event_name.setText(eventList.get(position).getEventName());
txt_event_details.setText(eventList.get(position).getVenueName() + ", " + getFormattedDate(eventList.get(position).getEventDate()));
layoutItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((HomeActivity) context).setEventProfileFrag(eventList.get(position).getFullJsonObject(), ((BitmapDrawable)img_main.getDrawable()).getBitmap());
}
});
} catch (Exception e) {
e.printStackTrace();
}
notifyDataSetChanged();
return layoutItem;
}
private String getFormattedDate(String dateString) throws ParseException {
//"2016-06-27 16:00:00"
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.UK);
Date newDate = format.parse(dateString);
format = new SimpleDateFormat("EEEE dd MMMM", Locale.UK);
String date = format.format(newDate);
return date;
}
}
最后在片段中,我从传入片段的参数中检索图像:
mParam2 = BitmapFactory.decodeByteArray(getArguments().getByteArray(ARG_PARAM2), 0, getArguments().getByteArray(ARG_PARAM2).length);
img_header.setImageBitmap(mParam2);
【问题讨论】:
-
显示你的适配器类。
标签: android listview android-fragments bitmap