2015-09-06 3 views
-1

Я новичок в разработке Android. Я пытаюсь загрузить несколько изображений в ListView с помощью LazyAdapter. Я сохраняю изображения в папке с возможностью копирования. У меня есть четыре изображения: image1.jpg, image2.jpg, image3.jpg и image4.jpg. Но в ListView они идут в следующем порядке: image1.jpg, image2.jpg, image1.jpg, image2.jpg. Я попытался изменить методы getItemId() и getItem(), но это не помогает загрузить все изображения в ListView, я все еще вижу только два из них. Я не могу понять, что я делаю неправильно. Пожалуйста, обратитесь к моему кодуAndroid. LazyAdapter загружает изображения некорректно

public class MainActivityFragment extends Fragment { 

CustomAdapter imagesAdapter; 

public MainActivityFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    int[] images = {R.drawable.image1, 
      R.drawable.image2, 
      R.drawable.image3, 
      R.drawable.image4}; 

    imagesAdapter = new CustomAdapter(getActivity(), images); 

    View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
    ListView listView = (ListView) rootView.findViewById(R.id.listView); 
    listView.setAdapter(imagesAdapter); 

    return rootView; 
} 
} 

Вот мой LazyAdapter:

public class CustomAdapter extends BaseAdapter { 

LayoutInflater inflater; 
int[] imagePaths; 

public CustomAdapter(Activity activity, int[] data) { 
    imagePaths = data; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    return imagePaths.length; 
} 

@Override 
public Object getItem(int position) { 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

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

    View view = convertView; 

    if(view == null) { 

     view = inflater.inflate(R.layout.list_view_item, parent, false); 
     ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
     imageView.setImageResource(imagePaths[position]); 
    } 

    return view; 
} 

} 

Пожалуйста, советы. Как заставить мой код работать правильно (т. Е. Показать все изображения в ListView, а не только два из них)?

+0

Переместить строку 'imageView.setImageResource (imagePaths [положение]);' вне из 'if', чтобы правильно установить изображение в строку. – Luksprog

ответ

0

Вы получаете это поведение, потому что listview разработан таким образом, чтобы повторно использовать элементы.

@Override 

общественное мнение GetView (интермедиат положение, Вид convertView, ViewGroup родитель) {

View view = convertView; 

if(view == null) { 

    view = inflater.inflate(R.layout.list_view_item, parent, false); 
    ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
    imageView.setImageResource(imagePaths[position]); 
} 

return view; 

}

Этот код объясняет это. Вы создаете представление только в том случае, если оно равно null, иначе оно будет повторно использовать уже созданное представление.

В вашем случае для элементов 1 и 2 вид был пустым, поэтому адаптер создал новые представления и правильно установил ресурсы изображения, но когда вы прокручиваете до пунктов 3 и 4, адаптер использует уже созданные виды, поэтому он будет показывать предыдущие изображения. Как предложил LuksProg, вам нужно переместить метод setImageResource вне предложения if, так что даже при повторном использовании представления он обновит его с помощью нового правильного изображения.

@Override 

общественное мнение GetView (интермедиат положение, Вид convertView, ViewGroup родитель) {

View view = convertView; 

if(view == null) { 

    view = inflater.inflate(R.layout.list_view_item, parent, false); 
    ImageView imageView = (ImageView) view.findViewById(R.id.imageView); 
} 

    imageView.setImageResource(imagePaths[position]); 

return view; 

}

Смежные вопросы