簡體   English   中英

Android:如何從ListView和arrayAdapter中刪除項目

[英]Android: how to remove an item from a listView and arrayAdapter

我在ArrayList中有一個項目集合。 我將它們添加到客戶適配器,如下所示:

this.m_adapter = new MyAdapter(this, R.layout.myitem,
    itemCart.m_items);

我列表中的每個項目都有一個刪除按鈕,但是我不確定如何將刪除按鈕的onClick()與ArrayList中的原始項目連接。 有人可以解釋如何執行此操作,也可以指向我可以閱讀的教程? 非諷刺/非居高臨下的反應受到極大的贊賞。

您可以在ArrayList上調用remove()方法

itemCart.m_items.remove(<index of element to remove>);
this.m_adapter.notifyDataSetChanged();

然后您需要調用notifyDataSetChanged(); 在適配器上更新ListView

只需注意列表視圖是子視圖(列表的行)的集合,就可以獲取元素的索引。

您可以在代碼中執行以下操作:

(例如,在getView()方法內部)

row.setOnLongClickListener(new OnLongClickListener() 
{
    @Override
    public boolean onLongClick(View view) {
        remove(listView.indexOfChild(view));
        return true;
    }
}

也就是說,解決方案只是使用indexOfChild(View)方法來獲取用戶(長按)的子視圖的索引。

到目前為止,這是我的解決方案:

getView()方法中,我這樣做:

deleteButton.setTag(position);

看起來getTag()返回一個Object。 因此,我首先將位置int轉換為Integer對象。 它似乎正在工作。

OnClickListener() ,執行以下操作:

items.remove(index.intValue());

到目前為止,一切都很好。

以下對我有用的作品:

/* Read values from resource into an array */
String[] strColorValues =  getResources().getStringArray(R.array.colors);

ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < strColorValues.length; i++) {
    list.add(strColorValues[i]);
}

ArrayAdapter adapterColors = new ArrayAdapter(getActivity(), android.R.layout.simple_spinner_item, list);

adapterColors.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinnerColors.setAdapter(adapterPermissionLevels);
spinnerColors.setOnItemSelectedListener(this);

/* Remove first element from the adapter and notify dataset changed. */
String item = spinnerColors.getItemAtPosition(0).toString();
adapterColors.remove(item);
adapterColors.notifyDataSetChanged();

這是我的代碼。

  transfer.setItemPosition(position, items.get(position).getAddMode());

這里的傳輸是主類的實例。 每當我單擊刪除按鈕時,它就會在該行中傳遞該項目在列表中的位置。

  public View getView(final int position, View convertView, ViewGroup parent) {
            View v = convertView;
          if (v == null) {
              final Context context = getContext();
                    LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.listviewitem_layout, null);
          }

          ItemEntry item = items.get(position);
          if (item != null) {
                    TextView textViewName = (TextView) v.findViewById(R.id.textViewItemName);
                    ImageView imageViewDelete = (ImageView) v.findViewById(R.id.imageViewDeleteIcon);

                    imageViewDelete.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {                   
                                transfer.showDialog(4);                             
                                transfer.setItemPosition(position, items.get(position).getAddMode());
                        }
                  });

          if (textViewName != null) {
                    textViewName.setText(item.getItemName());
          }

          if(imageViewDelete != null) {
              imageViewDelete.setImageResource(R.drawable.delete);
          }
      }
      return v;
        }
}

按位置刪除:

mainAdapter.remove(mainAdapter.getItem(position));

如最后一個:

mainAdapter.remove(mainAdapter.getItem(mainAdapter.getCount() - 1));

看來可以在ListView中獲得單擊項的索引(或位置),如下所示:

listview.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        listview.remove(listview.getItem(position).toString());
    }
}

因此,您需要偵聽Views的點擊,然后從中獲取索引。

嘗試這些行代碼對我非常有幫助

holder.image.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            list.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, list.size());
        }
    });

如果使用上下文菜單,則可以獲得AdapterContextMenuInfo,並且此結構提供了clicked元素的索引和ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM