Я хотел изучить sqlite для Android, поэтому я создал приложение для мгновенного тегирования, в котором пользователь может пометить свои фотографии и загрузить их в свою сеть (google +, fb, twitter). У меня есть ListFragment
, в котором пользователь может видеть все теги, которые он сделал, элементы изображения в списке хранятся в скрытой папке, а слова хранятся в sqlite db .. проблема заключается в том, что при прокрутке вверх или вниз некоторые элементы просто переключаются случайным образом, даже если у меня больше чем 8 элементов, их 8 первых элементов отображаются повторно (т.е. 1-8, а вместо 9-12 я вижу 1-4 снова) Единственная проблема может быть в адаптере, но после сеансов на сеансах отладки я не могу найти проблему мой код для адаптера -Странная ошибка в listfragment
public class FlowAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, List<String>>> data;
private static LayoutInflater layoutInflater = null;
public FlowAdapter(Activity activityContext,
ArrayList<HashMap<String, List<String>>> data) {
this.activity = activityContext;
this.data = data;
this.layoutInflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return data.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// method variables
ViewHolder cacheView;
HashMap<String, List<String>> photos = null;
photos = data.get(position);
ImageView iv;
FlowLayout flow;
ArrayList<String> subjects = new ArrayList<String>();
if (convertView == null) {
cacheView = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.list_item, null);
flow = (FlowLayout) convertView.findViewById(R.id.flow_tags);;
// add the tags to the flowlayout
int size = photos.get(DatabaseHandler.KEY_TAGS).size();
for (int i = 0; i < size; i++) {
String name = String.format("#%s",
photos.get(DatabaseHandler.KEY_TAGS).get(i));
Bubble.getBubble(name, flow, subjects, activity, photos
.get(DatabaseHandler.KEY_THUMBNAILPATH).get(1), false);
}
cacheView.image = (ImageView)convertView.findViewById(R.id.list_image);//iv;
cacheView.tags = flow;
convertView.setTag(cacheView);
}
cacheView = (ViewHolder) convertView.getTag();
cacheView.image.setImageBitmap(null);
DecodeTask task = new DecodeTask(cacheView.image);
task.execute(photos.get(DatabaseHandler.KEY_THUMBNAILPATH).get(1));
cacheView.image.setTag(R.id.list_image, task);
return convertView;
}
static class ViewHolder {
static FlowLayout tags;
static ImageView image;
public static FlowLayout getFlowLayout() {
return tags;
}
}
}
Схемы потока здесь - макета http://nishantvnair.wordpress.com/2010/09/28/flowlayout-in-android/ Пузырь отсюда - http://nishantvnair.wordpress.com/2010/09/28/android-create-bubble-like-facebook/ я использую этот SO нити, чтобы загрузить изображения на фоне - Large ListView containing images in Android любой помощи? = \ p.s Я знаю, что уже есть приложения, такие как [и на самом деле, но лучшее обучение приходит при написании кода, так что я сделал =)]
Как насчет размещения этой строки ** cacheView = (ViewHolder) convertView.getTag(); ** внутри условия else? Не уверен, что это поможет, но вы можете попробовать? –
По-прежнему нет эффекта ... Я подозреваю, что у него как-то есть соединение с flowlayout или bubbleview, поскольку они являются динамическими (другими словами, нет идентификатора, к которому я прикрепляю макет пузыря, я просто добавляю их в flowlayout во время выполнения - посмотрите на их реализацию на ссылках, которые я добавил) – crazyPixel