2016-05-15 78 views
0

我遇到了实施删除按钮的问题。它应该从RecyclerView中删除一个项目,如果你点击它。我的布局文件包含两个TextViews和ImageButton的,像这样:为什么我的删除按钮在RecyclerView中不起作用?

<TextView 
    android:id="@+id/layout_list_name" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:textStyle="bold" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:id="@+id/layout_list_date" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignStart="@+id/layout_list_name" 
    android:layout_alignLeft="@+id/layout_list_name" 
    android:layout_below="@+id/layout_list_name" /> 

<ImageButton 
    android:id="@+id/layout_list_delete" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:contentDescription="@string/layout_list_delete" /> 

这是管理的RecyclerView的项目和功能,我的适配器类:

List<RecyclerViewListSchema> list; 

public RecyclerViewListAdapter(List<RecyclerViewListSchema> list) { 
    this.list = list; 
} 

public static class RecyclerViewViewHolder extends RecyclerView.ViewHolder { 
    TextView name; 
    TextView date; 
    ImageButton delete; 

    public RecyclerViewViewHolder(View view) { 
     super(view); 

     name = (TextView) view.findViewById(R.id.layout_list_name); 
     date = (TextView) view.findViewById(R.id.layout_list_date); 
     delete = (ImageButton) view.findViewById(R.id.layout_list_delete); 
    } 
} 

@Override 
public RecyclerViewViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) { 
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_list, viewGroup, false); 
    RecyclerViewViewHolder viewHolder = new RecyclerViewViewHolder(view); 

    return viewHolder; 
} 

@Override 
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, final int position) { 
    viewHolder.name.setText(list.get(position).name); 
    viewHolder.date.setText(list.get(position).date); 
    viewHolder.delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      RecyclerViewListSchema item = list.get(position); 
      list.remove(position); 
      notifyItemRemoved(position); 
     } 
    }); 
} 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 
} 

@Override 
public int getItemCount() { 
    return list.size(); 
} 

更新: 这是确切的位置在我的删除功能的工作原理删除项目:

@Override 
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, final int position) { 
viewHolder.name.setText(list.get(position).name); 
viewHolder.date.setText(list.get(position).date); 
viewHolder.delete.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     RecyclerViewListSchema item = list.get(position); 
     list.remove(position); 
     notifyItemRemoved(position); 
    } 
}); 
} 

我RecyclerView填充一个从SQLite数据库中选择它旁边的按钮。我尝试点击它,但它没有做任何事情。我的代码中发生了什么?我做错了什么?有关如何解决此问题的任何建议?

+0

也表明你在哪里点击删除按钮 – AADProgramming

+0

你更新你的SQLite数据库的代码?您应该从数据库中删除项目。 – Amir

+0

我已经整理出我的问题。显然,我上面提供的代码实际上工作。出于某种原因,当我一直在手机上运行我的应用程序时,该应用程序未更新,因此我必须将其卸载并重新安装。感谢大家的帮助! – GWX

回答

1

删除时可以依赖位置。代之以做。

@Override 
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, int position) { 
    final RecyclerViewListSchema item = list.get(position); 
    viewHolder.name.setText(item.name); 
    viewHolder.date.setText(item.date); 
    viewHolder.delete.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      int pos = list.indexOf(item); 
      list.remove(pos); 
      notifyItemRemoved(pos); 
     } 
    }); 
} 
+0

它仍然不会删除该项目。 – GWX

+0

在onClick方法中打印一些内容并确保onClick被调用。 – santosh

2

更改您的onClick看起来像这样:

public void onClick(View view) { 
    RecyclerViewListSchema item = list.get(position); 
    list.remove(position); 
    notifyItemRemoved(position); 
    notifyItemRangeChanged(position, getItemCount()); 
} 
+0

它仍不会删除该项目。我还能尝试什么? – GWX

+0

@GWX尝试将Log.v()放入onClick以查看即使它被调用 – Pooya

+0

Android监视器中没有任何内容出现。 – GWX