2016-01-22 3 views
2

Перед тем, как вы прослушаете любезно прочитанный, я уже видел задаваемые вопросы. Многие проблемы не совпадают с ними.Каков наилучший способ реализации шаблона проектирования узора.

В настоящее время я больше имею дело с обычным ListView и обычным GridView. Я использую класс ViewHolder для плавной прокрутки. Но есть что-то странное, что я заметил. Элементы повторяются при прокрутке вниз по списку или gridView, когда я реализую ViewHolder, как рекомендуется в руководствах для Android. Но когда я инициализирую представления из него, элементы не повторяются.

Скажите, как я могу сделать это лучше. Это дает мне гладкую прокрутку, не повторяя одни и те же элементы.

public class GridAdapter extends BaseAdapter { 
    Context context; 
    Main values; 
    LayoutInflater inflater; 
    public GridAdapter(Context context, Main main){ 
     this.context=context; 
     this.values=main; 
     inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

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

    @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) { 

     ImageLoader imageLoader= ImageLoader.getInstance(); 
     ViewHolder viewHolder = null; 
     if(convertView==null){ 
      viewHolder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.grid_item,parent,false); 

      convertView.setTag(viewHolder); 
     } 
     else { 
      viewHolder=(ViewHolder)convertView.getTag(); 
     } 
     viewHolder.image=(ImageView)convertView.findViewById(R.id.thumbnail); 
     viewHolder.title=(TextView)convertView.findViewById(R.id.title); 
     viewHolder.title.setText(Html.fromHtml(values.getPosts().get(position).getTitle())); 
     imageLoader.displayImage(values.getPosts().get(position).getThumbnail_images().getFull().getUrl(), viewHolder.image); 
     return convertView; 
    } 

    private static class ViewHolder{ 
     public static ImageView image; 
     public static TextView title; 
    } 
} 

Этот код дает мне повторяющиеся элементы и рекомендуемый способ в Android гидами:

public class GridAdapter extends BaseAdapter { 
Context context; 
Main values; 
LayoutInflater inflater; 
public GridAdapter(Context context, Main main){ 
    this.context=context; 
    this.values=main; 
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

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

@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) { 

    ImageLoader imageLoader= ImageLoader.getInstance(); 
    ViewHolder viewHolder = null; 
    if(convertView==null){ 
     viewHolder = new ViewHolder(); 
     convertView = inflater.inflate(R.layout.grid_item,parent,false); 
    viewHolder.image=(ImageView)convertView.findViewById(R.id.thumbnail); 
    viewHolder.title=(TextView)convertView.findViewById(R.id.title); 
     convertView.setTag(viewHolder); 
    } 
    else { 
     viewHolder=(ViewHolder)convertView.getTag(); 
    } 

    viewHolder.title.setText(Html.fromHtml(values.getPosts().get(position).getTitle())); 
    imageLoader.displayImage(values.getPosts().get(position).getThumbnail_images().getFull().getUrl(), viewHolder.image); 
    return convertView; 
} 

private static class ViewHolder{ 
    public static ImageView image; 
    public static TextView title; 
} 
} 
+0

частный класс ViewHolder { общедоступный образ ImageView; Публичный заголовок TextView; } – Madhur

ответ

2
public static ImageView image; 
public static TextView title; 

неправильно. Они должны быть

public ImageView image; 
public TextView title; 

без static. Это должно решить вашу проблему. Вы можете узнать больше о статическом ключевом объекте here

+0

о, дорогая. Я даже этого не заметил. Большое спасибо! –

+0

добро пожаловать – Blackbelt

+0

Можете ли вы поделиться своими знаниями относительно статического класса? Почему мы объявляем класс static. –

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