android - ListView 查看器模式。在哪里设置删除项目的位置标签。安卓

标签 android listview

我发现 viewholder 模式有利于平滑滚动,但我遇到了该模式的错误。如果从 ListView 中删除一个项目,那么标签就会有点困惑。因此,删除第二个项目并不会删除用户点击的那个项目,而是删除上一个标签设置的那个。在下面的代码示例中,我为按钮位置设置标签的位置是否正确,或者它是否打破了 viewholder 范例?有没有人有更好的方法来删除项目?你怎么做呢?示例:

public View getView ( int position, View convertView, ViewGroup parent )
    {
        View v = convertView;
        ViewHolder holder;
        if( v == null )
        {
            LayoutInflater li = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = li.inflate(R.layout.fpc_contents_row, null);
            holder = new ViewHolder();
            holder.delete   = (Button)  v.findViewById( R.id.row_delete );
            v.findViewById( R.id.fpc_contents_row_delete ).setOnClickListener( global_onClickListener );
                    //used to set position tag here.  (deleted wrong items after the first delete)
                    //i.e)  holder.delete.setTag( position );
            v.setTag( holder );
        }
        else
            holder = (ViewHolder) v.getTag();
        //setting the tag here then delete functionality works just fine.
        holder.delete.setTag( position );
        holder.name.setText( fpcItems.get(position).item0.name );
        return v;
    }

final  OnClickListener global_onClickListener = new OnClickListener() 
    {
        public void onClick( final View view ) 
        {
            switch( view.getId() ) 
            {
            case R.id.fpc_contents_row_delete :
                int position = (Integer) view.getTag();
                arraylist.remove(position);
                notifyDataSetChanged();                                
                break;
            }
        }
    };

最佳答案

是的,如果您要在容器中的对象上设置标签,您需要在 (v == null) 条件之外进行。

如果不这样做,标签将只设置在新 View 上,而不会设置在回收 View 上。例如,如果向下三行的列表项使用回收 View 而不是扩充全新 View ,它将具有最初创建 View 时使用的任何位置的位置标签。

您的修复是正确的:确保在执行 holder = (ViewHolder)v.getTag() 调用后调用所有设置方法。

关于android - ListView 查看器模式。在哪里设置删除项目的位置标签。安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22386838/

相关文章:

android:如何在 ListView 中编辑一行?

android - 如何在通话开始时播放音频文件?

android - 如何在任何一个 Activity 中每秒更新标题布局文本并显示在所有屏幕中?

android - 如何在 ListView 上更改颜色和字体

android - 多个图像进度条加载就像在 Whats App 中一样

c++ - ListView控件中的LVN_ITEMCHANGED优化

java - Android Icon/Image设置模式多种选择

android - 我们如何在 android 中使用 kotlin 实现基本适配器?

java.lang.NumberFormatException : Invalid int: "" : Error 异常

java - 在Android/Java平台上加密共享 key