如何为ArrayAdapter的最后一项创建不同的视图?

时间:2011-02-07 17:34:58

标签: android listview android-arrayadapter

我正在从URL中检索项目列表,并使用自定义的ArrayAdapter在ListView中显示它们。我最多显示25个结果,但是从URL检索最多26个,因为如果有超过25个我想要显示“下一个”链接。我试图想办法让视图中的最后一个项目显示下一个链接而不是图像和其他项目显示的两个TextView。向下滚动,所有项目都显示出它们应该的方式,但最后一项继续看起来像其余项目。当向上滚动时,每五个项目都是空白的(由于分隔线可以告诉它仍然存在)。

在getView中:

if (position + 1 == limit) { // Limit = 26, corresponding position is 25
    Log.e("Last Item", String.valueOf(position));
    // Gone
    image.setVisibility(8);
    text.setVisibility(8);

    // Visible
    next.setVisibility(0);
} else {
    if (item != null) {

        Log.e("Other item", String.valueOf(position));
        if (top_text != null) {
            top_text.setText(item.getItemTitle(), BufferType.SPANNABLE);
        }
        if(bottom_text != null){
            bottom_text.setText(item.getItemDescription());
        }
    }
}
return view;

在ddms中,它仅为最后一项打印“Last Item”标签,并为其余项打印“Other Item”标签,但不会根据if-else更改项目。在XML中,next设置为off,因此不需要在else中更改。当我删除if-else并且只留下else中的代码时,列表正常运行但我需要下一个链接。有关奇怪行为的原因的任何想法?如果您需要查看任何其他代码或需要澄清正在发生的事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

请发布getView的完整代码。 你回来看;但是什么是视图,是转换视图还是从xml中膨胀?

以下是我如何获得最后一项的不同视图: 1.创建2个布局,第一个用于普通项目,第二个用于最后一个项目 2.在getView(int position,View convertView,ViewGroup parent)

View view = convertView;
if (view == null) {
LayoutInflater vi = (LayoutInflater) mContext
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.xxx, null);
} else {
    //check if view is not layout we need (based on position), we need inflate from xml
}

//set text ...