删除一项后,Recyclerview会将数据传递给下一项

时间:2018-07-13 03:40:10

标签: android android-recyclerview

标题似乎令人困惑,因为我无法使用文字正确解释这一点。

我会尽力解释我的问题。

当前我的回收站视图中有商品:

enter image description here

每个项目都包含一个删除按钮,该按钮将在recyclerview中删除该项目。

让我们假设我在列表中有5个项目:

我想要获得的是用户删除时 项目2 项目3的信息/数据将转移到项目2,

第4项中的数据将被传输到第3项和

第5项中的数据将被传输到第4项

最后将删除项目5。

我目前没有代码,但是我正在尽力构建它。

这是我的适配器代码,可能有帮助:

public class CreditCard_PostPayAdapter extends RecyclerView.Adapter<CreditCard_PostPayAdapter.MyViewHolder> {
    private static  String TAGedittext = "";
    //private final AccountHistoryTransactionActivity homeActivity;
    private Context mContext;
    private ArrayList<Integer> mHeaderText;

    CreditCard_PostPayAdapter adapter;
    public CreditCard_PostPayAdapter(Context mContext, ArrayList<Integer> mHeaderTextList ) {
        this.mContext = mContext;
        this.mHeaderText = mHeaderTextList;
    }

    @Override
    public CreditCard_PostPayAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.creditcard_postpay_item, parent, false);
        return new MyViewHolder(itemView);
    }


    @Override
    public void onBindViewHolder(final CreditCard_PostPayAdapter.MyViewHolder holder, int position) {
        final int pos = position + 1;
        final int mPosition = position;

        if (mHeaderText.size() ==  1) {
            holder.mDeleteButton.setVisibility(View.GONE);
        } else {
            holder.mDeleteButton.setVisibility(View.VISIBLE); }
           holder.mDeleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    mHeaderText.remove(mPosition);
                    ArrayList<Integer> temp  = new ArrayList<Integer>();
                    for (int i = 0 ; mHeaderText.size() - 1 >= i ; i++) {
                        temp.add(i);
                    Log.d("Counter++",""+i);
                    }

                    holder.mMerchantName.setText("");
                    holder.mTransactionAmountEditText.setText("");
                    holder.mTransactionDateEditText.setText("");
                    holder.mPostingDateEditText.setText("");


                    mHeaderText.clear();
                    mHeaderText.addAll(temp);
                    notifyDataSetChanged();


            }
        });


    }



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


    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView mHeaderTitle
        public ImageView mArrowHeader;
        public ImageButton mDeleteButton;
        public TextInputEditText mTransactionDateEditText,
                mPostingDateEditText,
                mTransactionAmountEditText;

        public MyViewHolder(View view) {
            super(view);
            this.mHeaderTitle = (TextView) view.findViewById(R.id.header_title);

            this.mDeleteButton = view.findViewById(R.id.mDeleteButton);
            this.mMerchantName = view.findViewById(R.id.mMerchantNameTextView);
            this.mTransactionDateEditText = view.findViewById(R.id.Transaction_date);
            this.mPostingDateEditText = view.findViewById(R.id.posting_date);
            this.mTransactionAmountEditText = view.findViewById(R.id.Transaction_amount);
        }
    }

}

我当前的删除按钮功能是:

删除项目(n),然后重新计算剩余的所有项目。

3 个答案:

答案 0 :(得分:0)

替换您的onBindViewHolder方法并尝试,

@Override
public void onBindViewHolder(final CreditCard_PostPayAdapter.MyViewHolder holder, int position) {
    holder.mDeleteButton.setTag(position);
    holder.mDeleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int clickedPos = (int) view.getTag();
            mHeaderText.remove(clickedPos);
            notifyItemRemoved(position);
        }
    });
}

答案 1 :(得分:0)

如果要删除第二个元素。删除元素,其余的将由recyclerAdapter小心删除行并对齐数据。

在您的onClickListener内部,从ArrayList中删除数据,然后调用notifyItemRemoved()

在ViewHolder类中编写onClick

onClick(View view){
        mHeaderText.remove(getAdapterPosition());
        notifyItemRemoved(getAdapterPosition());
}

我希望这会对您有所帮助。

答案 2 :(得分:0)

您只需在onClick中执行以下操作,即可删除列表中的项目并刷新适配器:

holder.mDeleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                               mHeaderText.remove(position);
                               notifyItemRemoved(position);
                               notifyItemRangeChanged(position, mHeaderText.size());

            }
        });