设置第一个ListView项的布局

时间:2016-11-22 06:43:17

标签: java android android-layout

所以我试图使用以下代码为我的第一个ListItem元素设置不同的布局资源:

int type;
@Override
public int getItemViewType(int position) {

    if(position==0) {
        type = R.layout.queue_item_next;
    } else {
        type = R.layout.queue_item;
    }

    return type;
}


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

    if(convertView == null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
    }

但是这段代码有一些意想不到的行为。由于某种原因,ListView的最后一个元素也被设置为具有这种替代布局,我不知道为什么。

可能导致这种情况发生的原因是什么?

感谢。

2 个答案:

答案 0 :(得分:2)

问题即将发生,因为getItemViewType()返回的值大于视图类型的数量。您可以使用以下代码对我来说完美无缺。

@Override
    public int getItemViewType(int position) {

        if(position==0) {
            return 0;
        } 
        return 1;
    }

   @Override
    public int getViewTypeCount() {
        return 2;
    }

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

        if(convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            int type = getItemViewType(position);
        if(type == 0)
            convertView = (View) inflater.inflate(R.layout.first_layout, parent, false);
        else 
        convertView = (View) inflater.inflate(R.layout.second_layout, parent, false);
        }
}

注意:如果只有第一个视图不同,那么最好的选择是使用函数listview.addHeaderView()函数使用headerView link

答案 1 :(得分:0)

因为您正在使用if(convertView == null) {} 这意味着如果以前的视图在内存中可用,则其他人创建一个新视图。因此,有时滚动快/慢取决于手机的可用资源,它会有所不同。

要解决此问题,请不要检查if(convertView == null)

像这样使用

@Override
public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = (View) inflater.inflate(getItemViewType(position), parent, false);
    }