Android 如何在ListVIEW中间添加一些空间?

Android 如何在ListVIEW中间添加一些空间?,android,listview,padding,Android,Listview,Padding,我试图在listview中的第4项和第5项之间添加一些额外的空间。我有什么选择 我尝试在适配器的getView()中执行此操作,并手动获取对第四个元素的访问权限并向其添加填充 有更好的方法吗?我想了一些方法,但老实说,唯一能做到这一点的方法是在位置等于4时更改适配器中的布局。我的意思是,您可以使用RelativeLayout作为第4个和第5个元素之间的空间来创建一个xml文件,并将可见性设置为gone,然后将其置于适配器的所有元素之上。当您的getView中的位置等于4时,您可以使用nameOf

我试图在listview中的第4项和第5项之间添加一些额外的空间。我有什么选择

我尝试在适配器的getView()中执行此操作,并手动获取对第四个元素的访问权限并向其添加填充


有更好的方法吗?

我想了一些方法,但老实说,唯一能做到这一点的方法是在位置等于4时更改适配器中的布局。我的意思是,您可以使用
RelativeLayout
作为第4个和第5个元素之间的空间来创建一个xml文件,并将可见性设置为gone,然后将其置于适配器的所有元素之上。当您的
getView
中的位置等于4时,您可以使用
nameOfYourRelativeLayout.setVisibility(View.visible)


因此,您只能在第4和第5个元素之间添加此空格。我的建议只是一个建议,但我认为它可以很好地工作。

另一种方法是对第四项使用不同的布局(有额外的填充)。它与您的解决方案类似,但可能有点“干净”。我假设您正在扩展ArrayAdapter

在适配器中,重写getViewTypeCount()方法:

这样,您就可以告诉适配器您将对项目使用两种不同的布局。接下来,您必须通过重写另一个方法来指定哪些项将属于哪种类型:

@Override public int getItemViewType(int position) {
    if(position == 3) {
        return 0;
    } else {
        return 1;
    }
}
这将告诉您的适配器对列表中的第四个元素使用不同的视图(仅),而不会对其他元素重复使用该视图。现在来看最后一部分,重写onCreateView():

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

    if(convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);

        if(position == 3) {
            convertView = inflater.inflate(R.layout.your_layout_with_padding, parent, false);
        } else {
            convertView = inflater.inflate(R.layout.your_regular_item_padding, parent, false);
        } 

        //TODO this is the place to initialize your view holder

    } else {
        //TODO this is the place to restore your view holder
    }

    //TODO setup your view here

    return convertView;
}

对于position==3的项(列表中的第四项)convertViewgetView()方法的参数将为null,因为这是列表中类型1的第一项(也是唯一一项)。因此,您可以对包含该项目填充的不同布局进行充气

在listview中布局所有项目,以包括数据和标题视图,可能是文本视图,甚至是与其他布局类似的视图组。保持标题不可见,直到代码中的某些逻辑触发(即pos==4),并使标题可见

能否共享getView方法?添加空白列表项?
 @Override public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(context);

        if(position == 3) {
            convertView = inflater.inflate(R.layout.your_layout_with_padding, parent, false);
        } else {
            convertView = inflater.inflate(R.layout.your_regular_item_padding, parent, false);
        } 

        //TODO this is the place to initialize your view holder

    } else {
        //TODO this is the place to restore your view holder
    }

    //TODO setup your view here

    return convertView;
}