2

我有一个列表视图,一个自定义的,我想在第一个项目的左侧有一个加号图标。仅在第一项!

我编写了自定义适配器并在 getView() 方法中使用了这样的 if 条件:

If position == 0

imgicon.setvisibility=0;

}

else

{
imgicon.setvisibility=1;
}

但是当我上下滚动列表时,不仅第一个项目显示图标,而且一些随机项目也显示该图标。怎么了?这是一个错误吗?

编辑:更不用说如果我删除线:imgicon.setvisibility==0,所有图标都会消失。

编辑:

这是我的自定义数组适配器:

public class Projects_list_custom_array extends ArrayAdapter<Project_Detail> implements
    Filterable {
private final Object mLock = new Object();
private ItemsFilter mFilter;
public ArrayList<Project_Detail> mItems;
private ArrayList<Project_Detail> objects;

public Projects_list_custom_array(Context context, int textViewResourceId,
        ArrayList<Project_Detail> objects) {
    super(context, textViewResourceId, objects);
    this.objects = objects;
    this.mItems = new ArrayList<Project_Detail>(objects);
}

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

    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.activity_placeholder_projects_list,
                null);
    }

    Project_Detail i = objects.get(position);

    if (i != null) {

        TextView tt = (TextView) v
                .findViewById(R.id.projects_list_first_placeholder);

        RelativeLayout projects_list_layout = (RelativeLayout)v.findViewById(R.id.projects_list_placeholder_layout);

        if (tt != null) {
            tt.setText(i.get_projectname() + " " + position);
        }

        if (position == 0) {

            ImageView imgv = new ImageView(getContext());
            imgv.setImageResource(R.drawable.project_add);
            projects_list_layout.addView(imgv);


        }


    }

    return v;

}

/* ... */
@Override
public int getCount() {
    return objects.size();
}

@Override
public Project_Detail getItem(int position) {
    return objects.get(position);
}
4

3 回答 3

2

与其动态地将 ImageView 添加到您的布局中,不如将其作为 xml 布局的一部分并使用它的可见性。

因此,假设您已将其添加到布局中,这部分代码应如下所示 -

ImageView iv = (ImageView) v.findViewById(R.id.some_id);
if(position == 0)
      iv.setVisibility(View.VISIBLE);
else
      iv.setVisibility(View.GONE);

else 部分很重要,因为适配器会重用视图。这就是为什么你有一些带有“加号”图标的随机元素的原因

于 2013-07-03T09:10:48.900 回答
0

好的,我们需要查看您的完整代码以了解这里出了什么问题。你能告诉我们实际的 Java / XML 文件吗?

首先,列表项可见性的默认值是多少?确保加号按钮默认设置为 View.GONE,并且列表项设置为 View.VISIBLE。

其次,您是否为每个列表项复制相同的视图?这是否意味着所有的imgicons都有相同的ID?也许您应该以编程方式将 imgicon 插入第一个列表元素,并且只插入第一个列表元素。

于 2013-06-14T02:36:43.823 回答
0

你能告诉我们实际的吗Java / XML files?

但基本思想是:首先在您的 XML( R.layout.activity_placeholder_projects_list) 文件中添加一个imagebutton,然后在 java 中使用 if(position==0){//set visibility to Visible}else{//set visibility to gone}. in getview().

于 2013-06-19T13:50:47.617 回答