在listview的第一个项目上添加图标:滚动它,图标随机移动

时间:2013-06-14 02:28:51

标签: android listview android-listview scroll

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

我编写了自定义适配器并在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);
}

3 个答案:

答案 0 :(得分: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部分很重要,因为适配器重用了视图。这就是为什么你有一些带有'加'图标

的随机元素的原因

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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().