リストビューのネットワークイメージビューからフラグメントにビットマップを渡すときに、私はいくつかの奇妙な動作をしています。リストビューアダプターからフラグメントの不思議な振る舞いにビットマップを渡す
私はlistviewアダプタの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);
アダプタクラスを表示します。 – Drv
@Drvはそれを加えました.. – MichaelStoddart