【问题标题】:How to get deleted list item from custom listView android?如何从自定义 listView android 中获取已删除的列表项?
【发布时间】:2018-02-06 09:53:18
【问题描述】:

我正在使用带有TextViewImageButton 的自定义列表视图。在按钮的单击事件中,我想从列表中删除该项目并获取 textview's 文本并将其传递给活动。

这是我的代码...

适配器

//getView
TextView textView = view.findViewById(R.id.textViewName);
    ImageButton imageButtonClear = view.findViewById(R.id.imageButtonClear);

    textView.setText(document.getDocName());

    imageButtonClear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            documentList.remove(i);
            CustomAdapter.this.notifyDataSetChanged();
        }
    });

活动

//setting listview adapter
    customAdapter = new CustomAdapter(context,documentList);
    listViewDoc.setAdapter(customAdapter);
    //How to get deleted item from list here...

【问题讨论】:

    标签: android listview android-adapter


    【解决方案1】:

    Adapter 中创建interface,即OnItemClearListener

    public interface OnItemClearListener{
         void onItemClear(String itemName);
    }
    

    Activity 中实现OnItemClearListener

    并在Adapter 中传递Activity 引用

    customAdapter = new CustomAdapter(context,documentList,this);
    

    创建OnItemClearListener的变量并将其值赋值给CustomAdapter

    这样调用接口的方法。

    imageButtonClear.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClearListener.onItemClear(document.getDocName());
            documentList.remove(i);
            CustomAdapter.this.notifyItemRemoved(i);
        }
    });
    

    【讨论】:

      【解决方案2】:

      当您在一个 ArrayList/Array 中删除列名并将其传递给 Activity 的行存储时。

      TextView textView = view.findViewById(R.id.textViewName);
          ImageButton imageButtonClear = view.findViewById(R.id.imageButtonClear);
      
       List<String> data = new ArrayList<String>(); // Here creating an array
      
          textView.setText(document.getDocName());
      
          imageButtonClear.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  documentList.remove(i);
                  data.add(document.getDocName()); // here adding data to arraylist
                  CustomAdapter.this.notifyDataSetChanged();
              }
          });
      

      【讨论】:

      • 我如何将它传递给活动...?
      • 每次删除,你要传递给活动吗? @M.Usman
      • 是的。我希望在实例上从 lsit 中删除每个项目。
      • 同时你想去有价值的活动还是别的? @M.Usman
      【解决方案3】:

      在你的活动中写一个公共方法

      public void setDeletedItem(String documentName)
          {
             //get values from object 
          Intent intent = new Intent(YourActivity.this, SecondActivity.class);
          intent.putExtra("VALUE",documentName);
          startActivity(intent);
          }
      
      
      
      imageButtonClear.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  if (mContext instanceof YourActivity) {
                          ((YourActivity) mContext).setDeletedItem(documentList.get(i).getDocName());
                      }
                  documentList.remove(i);
                  CustomAdapter.this.notifyDataSetChanged();
              }
          })
      

      ;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2012-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多