2015-09-04 152 views
2

我无法从RecyclerView中删除项目。当我点击删除时,该项目将从RecyclerView中删除,但当我再次打开该应用程序时会返回。我希望这只是一个小问题,有人在这里可以指出或指导我到哪个区域进行故障排除。 removeItem(String item)以粗体显示是我认为的问题。你不能在这篇文章中看到它,但它是“未使用”。从RecyclerView中删除项目

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { 

    private List<Grocery> mListData; 
    private SQLGroceryHelper helper; 
    RecyclerViewAdapter adapter; 

    //Adapter's Constructor// 
    public RecyclerViewAdapter(List<Grocery> mDataList) { 
     this.mListData = mDataList; 
    } 

    //Provide a reference to the views for each contact item// 
    public class MyViewHolder extends RecyclerView.ViewHolder { 
     TextView rowItem; 
     ImageButton purchasedButton; 
     ImageButton deleteButton; 
     LinearLayout linearLayout; 

     public MyViewHolder(View itemView) { 
      super(itemView); 
      linearLayout = (LinearLayout) itemView.findViewById(R.id.recycler_row); 
      rowItem = (TextView) itemView.findViewById(R.id.item_field1); 
      purchasedButton = (ImageButton) itemView.findViewById(R.id.item_purchased); 
      deleteButton = (ImageButton) itemView.findViewById(R.id.delete_item); 
     } 
    } 

    //Inflate the view based on the viewtype provided// 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     //Create a new view by inflating the row item xml// 
     View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_row, parent, false); 

     //Set the view to the ViewHolder// 
     MyViewHolder holder = new MyViewHolder(row); 
     return holder; 
    } 

    //Display data at the specified position// 
    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     holder.rowItem.setText(mListData.get(position).getTextItem()); 
     holder.purchasedButton.setOnClickListener(new View.OnClickListener() { 
      //Ignore this click for now// 
      @Override 
      public void onClick(View v) { 
       removeItem(position); 
      } 
     }); 
     holder.deleteButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       removeItem(position); 
      } 
     }); 
    } 

    public void **removeItem**(String item) { 
     int position = mListData.indexOf(item); 
     if (position != -1) { 
      mListData.remove(item); 
      notifyItemRemoved(position); 
     } 
    } 

    public void removeItem(int position) { 
     mListData.remove(position); 
     notifyItemRemoved(position); 
    } 

    @Override 
    public int getItemCount() { 
     if (mListData == null) { 
      return 0; 
     } 
     return mListData.size(); 
    } 
} 
+0

您是从数据库中删除数据吗? –

回答

2

您是从本地对象中删除数据,mListData我猜的原始数据对象保持不变。从原始数据对象中删除数据项以及

声明一个接口

public interface AdapterCommunication{ void removeStringItem(int position); }

然后在适配器

private AdapterCommunication mListener; 

public void setOnClickListener(AdapterCommunication listener){ 
       mListener = listener; 
} 
从你的行为,你初始化适配

然后

RecyclerViewAdapter adapter = new RecyclerViewAdapter(list); 

adapter.setOnClickListener(new AdapterCommunication{ 

public void removeStringItem(int position){ 
    list.remove(position); 
    adapter.notifyDataSetChanged(); 
    } 
}); 

在你的adaper中,

holder.deleteButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mListener.remove(position); 
     } 
    }); 
+0

某些原因,我无法删除字符串项目。不知道我是否以错误的方式去做。 – Kimo

+0

发布你的代码从原始数据对象中删除字符串项目 – stallianz

+0

public void removeItem(String item){position = mListData.indexOf(item); if(position!= -1)mListData.remove(item); notifyItemRemoved(position); } } – Kimo