使用LazyAdapter自定义第一行ListView

时间:2014-04-14 23:45:28

标签: android listview android-lazyadapter

我有一个ListView显示有图像的新闻,并设置何时(位置== 0)更改布局,然后设置正常listview_row以获取以下新闻,但这仅适用于屏幕上显示的3个项目,然后是位置回到0并再次更改视图,这里有任何帮助吗?

Top of ListView After some scrolling

这是我的lazyAdapter代码,

        vi = convertView;

        Log.d("NOTICIAS", "P0sition: " + position);
        // set Layout for 1rst item
        if (convertView==null && position == 0) {
            vi = inflater.inflate(R.layout.noticias_list_item_first, null);     
        }
        // set layout for the next items
        else if(convertView==null  && position != 0){
            vi = inflater.inflate(R.layout.noticias_list_item, null);
        }

        TextView news_id = (TextView)vi.findViewById(R.id.news_id); // news_id
        TextView news_titulo = (TextView)vi.findViewById(R.id.news_titulo); // news_titulo
        TextView news_desc = (TextView)vi.findViewById(R.id.news_desc); // news_desc
        //TextView news_fecha = (TextView)vi.findViewById(R.id.news_fecha); // news_fecha
        ImageView news_img = (ImageView)vi.findViewById(R.id.news_img); // news_img

        HashMap<String, String> news = new HashMap<String, String>();
        news = data.get(position);

        // Setting all values in listview
        news_id.setText(news.get(NoticiasActivity.TAG_NEWS_ID));
        news_titulo.setText(news.get(NoticiasActivity.TAG_NEWS_TITULO));
        news_desc.setText(news.get(NoticiasActivity.TAG_NEWS_DESC));
        //news_fecha.setText(song.get(NoticiasActivity.TAG_NEWS_FECHA));
        imageLoader.DisplayImage(news.get(NoticiasActivity.TAG_NEWS_IMG), news_img);

            return vi;

1 个答案:

答案 0 :(得分:1)

ListView为了性能目的而回收列表项,因此在您的情况下,它会尝试使用0,3,6 ...索引的相同视图。

您需要Override getViewTypeCount并返回 2 ,因为您有两种不同的布局。

 @Override
public int getViewTypeCount() {
    return 2; // return the view type
}

另外,Override getItemViewType并为position 0返回一个唯一的类型,并为此类其他位置返回相同的类型。

@Override
public int getItemViewType(int position){
    // return a unique number
    if(position==0){
        return 0;
    }
    else {
        return 1;
    }
}