Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在listView中引用项_Android_Listview_Android Listview - Fatal编程技术网

Android 如何在listView中引用项

Android 如何在listView中引用项,android,listview,android-listview,Android,Listview,Android Listview,我有一个带有自定义布局TextView、Checkbox和imageView的Listview,自定义Listview设置为扩展BaseAapter的适配器 getView方法发布在下面 我试图做的是,当触摸imageView时,应该删除ListView中的项目,并将更改通知适配器。在mainActivity中,我使用了OnItemClickListener,但我不知道如何获取对extends Baseadapter类中getView方法中存在的imageView的引用 如何从mainActiv

我有一个带有自定义布局TextView、Checkbox和imageView的Listview,自定义Listview设置为扩展BaseAapter的适配器

getView方法发布在下面

我试图做的是,当触摸imageView时,应该删除ListView中的项目,并将更改通知适配器。在mainActivity中,我使用了OnItemClickListener,但我不知道如何获取对extends Baseadapter类中getView方法中存在的imageView的引用

如何从mainActivity获取对getView方法的引用,并根据clickAction删除该项,并通知listView的管理员

换句话说,如果我在listView中有5个项目,如果单击了项目编号3的imageView,则应删除整个项目3,并通过调用notifyDatasetChanged通知适配器

McClick侦听器:


我不确定我是否理解你的问题,但如果我理解了,你可以这样解决:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutinflater.inflate(R.layout.list_items_layout, null);
    }

    TextView tv = (TextView) convertView.findViewById(R.id.tvlist_topic);
    CheckBox cb = (CheckBox) convertView.findViewById(R.id.cbList_hook);
    ImageView iv = (ImageView) convertView.findViewById(R.id.ivList_delete);

    tv.setText(this.arrayList.get(position));

    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setVisibility(View.INVISIBLE); //or View.GONE
        }
    }
    return convertView;
}
编辑:如果要删除整个列表项,请改用此选项:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutinflater.inflate(R.layout.list_items_layout, null);
    }

    TextView tv = (TextView) convertView.findViewById(R.id.tvlist_topic);
    CheckBox cb = (CheckBox) convertView.findViewById(R.id.cbList_hook);
    ImageView iv = (ImageView) convertView.findViewById(R.id.ivList_delete);

    tv.setText(this.arrayList.get(position));

    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            arrayList.remove(position);
            notifyDatasetChanged();
        }
    }
    return convertView;
}

可以,但将视图的可见性设置为“不可见”或“消失”与从lisView中删除该项相同。此外,如果我使用您的答案,我如何通知listView适配器?您所说的通知适配器是什么意思?如果您是这么想的,那么有一个方法notifyDatasetChanged。是的,但是在getView中如何调用notifyDatasetchanged2呢。如果我在mainActivity中,如何根据imageview是否单击来删除条目?我尝试调用getAdapter,但该方法不存在抱歉,这是适配器本身,只需调用notifyDatasetChanged,请参阅编辑的答案。是否要从布局文本/检查/图像中删除ImageView,还是要从列表中删除整个条目?刚刚看到您的编辑,忽略我的评论,我将编写答案如果单击ImageView,则应将整个条目从列表中删除,并且我要将更改通知适配器。例如,如果我在listView中有5个项目,如果单击了项目编号3的imageView,则应删除整个项目3并通知适配器。实际上,这取决于。扩展BaseAdapter的类从何处获取数据?其基本思想是,适配器必须在getCount中少返回一个,并且不再提供该位置。但是BaseAdapter是抽象的,它取决于您如何实现。我可以为ArrayAdapter写一个答案。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutinflater.inflate(R.layout.list_items_layout, null);
    }

    TextView tv = (TextView) convertView.findViewById(R.id.tvlist_topic);
    CheckBox cb = (CheckBox) convertView.findViewById(R.id.cbList_hook);
    ImageView iv = (ImageView) convertView.findViewById(R.id.ivList_delete);

    tv.setText(this.arrayList.get(position));

    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setVisibility(View.INVISIBLE); //or View.GONE
        }
    }
    return convertView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        LayoutInflater layoutinflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        convertView = layoutinflater.inflate(R.layout.list_items_layout, null);
    }

    TextView tv = (TextView) convertView.findViewById(R.id.tvlist_topic);
    CheckBox cb = (CheckBox) convertView.findViewById(R.id.cbList_hook);
    ImageView iv = (ImageView) convertView.findViewById(R.id.ivList_delete);

    tv.setText(this.arrayList.get(position));

    iv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            arrayList.remove(position);
            notifyDatasetChanged();
        }
    }
    return convertView;
}