首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从RecyclerView中删除行

从RecyclerView中删除行
EN

Stack Overflow用户
提问于 2014-10-31 19:18:58
回答 6查看 23.3K关注 0票数 6

我在这篇文章的帮助下以某种方式实现了循环视图,现在我的要求是在运行时从这个循环视图中删除一行。

链接- http://treyrobinson.net/blog/android-l-tutorials-part-3-recyclerview-and-cardview/

请帮帮我。

谢谢。

EN

回答 6

Stack Overflow用户

发布于 2014-10-31 19:25:34

因为我们不知道你的广告怎么样,并且给出了链接中的信息,所以你可以在适配器中创建一个删除对象的方法:

代码语言:javascript
运行
复制
public void removeItem(int position) {
       mData.remove(position);
       notifyItemRemoved(position);
}

你可以从你的活动中获得所有这些,比如:

代码语言:javascript
运行
复制
((MyRecyclerAdapter)myRecyclerView.getAdapter()).removeItem(position);
票数 12
EN

Stack Overflow用户

发布于 2015-10-29 17:49:13

我能够让它像这样工作。

代码语言:javascript
运行
复制
 ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
            @Override
            public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
                //Remove swiped item from list and notify the RecyclerView
                datalist.remove(viewHolder.getAdapterPosition());
                // this line animates what happens after delete
                adapter.notifyItemRemoved(viewHolder.getAdapterPosition());
                Snackbar.make(recyclerView, "delete successful", Snackbar.LENGTH_LONG).show();
            }

            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
                return false;
            }
        };

并将上面的内容设置为回收器视图,如下所示。

代码语言:javascript
运行
复制
    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
票数 5
EN

Stack Overflow用户

发布于 2016-03-06 04:07:03

如果您想通过单击某一行来删除它,我认为更简洁的方法是在ViewHolder中实现onClicks。然后在适配器上实现一个公共的remove方法,然后通过onCreateViewHolder方法将适配器传递给ViewHolder。

应该是这样的:

-示例

适配器:

代码语言:javascript
运行
复制
public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> {

private List<Object> mDataset; // This is the list of items to be shown    
//Here you would write the rest of your Adapter code

    public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        final View itemView = mInflater.inflate(R.layout.item_recyclerview_round, parent, false);
        return new RoundViewHolder(itemView, this);
    }

    public void removeItem(int position) {
        mDataSet.remove(position);
        notifyItemRemoved(position);
        // Add whatever you want to do when removing an Item
    }
}

ViewHolder:

代码语言:javascript
运行
复制
public class MyViewHolder RecyclerView.ViewHolder 
    implements View.OnClickListener {

    private MyAdapter myAdapter;
    // Here you would write the rest of your ViewHolder code

    public MyViewHolder (View itemView, MyAdapter myAdapter){
        super(itemView);
        this.myAdapter = myAdapter;
        // Here you would write the rest of your constructor
    }

    public void onClick(View view) {
        myAdapter.removeItem(getAdapterPosition());
    }

这对我很管用。我不知道是否可以提高性能(可能),但这是我发现的最简单的方法。

我希望它能帮上忙。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26673444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档