2016-09-13 4 views
0

Здесь я определил SiteAdapter и простирается от ArrayAdapter:, как использовать arrayadapter.getview методу

public class SiteAdapter extends ArrayAdapter<Site> { 
private int resourceId; 
private List<Site> sites = null; 
private Context context; 
public SiteAdapter(Context context, int resource, List<Site> objects) { 
    super(context, resource, objects); 
    this.context = context; 
    this.resourceId = resource; 
    this.sites = objects; 
} 

@Override 
public Site getItem(int position) { 
    return sites.get(position); 
} 

@Override 
public int getCount() { 
    return sites.size(); 
} 

//get the viewpage which inflate by site_layout.xml file 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Site site = getItem(position); 
    View view = convertView; 
    if (view == null) { 
     LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = vi.inflate(resourceId, null); 
    } 
    //this place we need to get the whole widget in site_layout.xml file 
    ImageView i1 = (ImageView) view.findViewById(R.id.thumbnail); 
    TextView address = (TextView) view.findViewById(R.id.address); 
    TextView t1 = (TextView) view.findViewById(R.id.name); 
    TextView t3 = (TextView) view.findViewById(R.id.distance); 
    i1.setImageResource(site.getImageId()); 
    address.setText(site.getAddress()); 
    String name = site.getName(); 
    String result = parse(name); 
    //set name of the view 
    t1.setText(name); 
    t3.setText("<" + site.getDistance() + "m"); 

    return view; 
} 

и в MainActivity, я установил ListView с помощью этого адаптера сайта, и я выделил значение R.drawable.blank только для ImageView, и теперь мне нужно изменить ImageView, а затем получить каждый вид строки через метод getAddapter, возвращенный вид, но вопрос в том, почему ImageView внутри такой взгляд не может заменить новое значение (изображения), то результат всегда получится предыдущий R.drawable.blank ImageView:

здесь MainActivity сниппет:

View view = siteAdapter.getView(2, null, listView); 
     ImageView image1 = ((ImageView)view.findViewById(R.id.thumbnail)); 
     image1.invalidate(); 
     image1.setImageResource(R.drawable.amap_end); 
     siteAdapter.notifyDataSetChanged(); 
+0

Сначала рассмотрим использование шаблона ViewHolder. Проверьте, что значение внутри 'getImageId()' – Aniruddha

+1

просто измените значение ** setImage ** для вашего конкретного элемента arraylist, который вы хотите изменить, и вызовите ** adapter.notifyDataSetChange() **. Он изменит ваше изображение в виде списка. –

ответ

1

Дело в том, вам не нужно звонить getView() из вашей деятельности. Он называется только адаптером.

Теперь, если вы хотите изменить свой imageView, вы должны изменить его из списка ваших сайтов, который является ссылками на ваш адаптер, из деятельности, а затем позвонить notifyDataSetChanged() с адаптера.

активность:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home); 

     // setUpViews 
     SiteAdapter adapter = new SiteAdapter(context,List<Site> sites); 
     listView.setAdapter(adapter); 

     // changing imageView 
     Site site = sites.get(position); 
     site.setImage(R.drawable.*); 

     // updating site into list with new image 
     sites.set(position,site); 

     // refresh the listView 
     adapter.notifyDataSetChanged(); 

Однако рассмотреть возможность использования RecycleView вместо ListView.

+0

Я знаю этот способ и ваши средства, но атрибут изображения объекта сайта является целым типом, но здесь мне нужно загрузить изображение с сервера и сохранить его в файле кеша, поэтому setImage (R.drawable. *) Больше не может использовать для файла или битовая карта. – Crabime

+0

Ну, в этой ситуации вы должны предоставить URL-адреса изображений откуда-то, тогда вы можете использовать библиотеки Glide или Picasso для асинхронного скачивания растрового изображения. Наконец, после загрузки эти библиотеки собираются показать ваши растровые изображения в правильном положении вашего списка. http://www.androidhive.info/2016/04/android-glide-image-library-building-image-gallery-app/ http://code.tutsplus.com/tutorials/android-sdk- work-with-picasso - cms-22149 –

+0

На самом деле, я действительно удивляюсь, почему getView не может использовать, что сделало меня странным, я даже не знаю почему. – Crabime