【问题标题】:want to update my ListView after Delete in RecyclerView想在 RecyclerView 中删除后更新我的 ListView
【发布时间】:2016-12-05 09:54:29
【问题描述】:

实际上,这是我第一次使用 RecyclerView,我尝试从列表视图中删除项目,因为用户单击 menuItem 中的删除按钮...。 但是在点击删除选项后,我的项目是删除我的数据库但我的适配器没有更新...... 帮助我如何设置我的适配器

我的代码:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
public static final String DELETE_URL = "http://delete.php";
String KEY_UNIQUE_ID="id";
Context context;

List<GetDataAdapter> getDataAdapter;

ImageLoader imageLoader1;

public RecyclerViewAdapter(List<GetDataAdapter> getDataAdapter, Context context){

    super();
    this.getDataAdapter = getDataAdapter;
    this.context = context;
}

@Override
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclerview_items, parent, false);

    ViewHolder viewHolder = new ViewHolder(v);

    return viewHolder;
}

@Override
public void onBindViewHolder(final ViewHolder Viewholder, final int position) {

    final GetDataAdapter getDataAdapter1 =  getDataAdapter.get(position);

    imageLoader1 = ServerImageParseAdapter.getInstance(context).getImageLoader();

    imageLoader1.get(getDataAdapter1.getImageServerUrl(),
            ImageLoader.getImageListener(
                    Viewholder.CircularNetworkImageView,//Server Image
                    R.drawable.loading,//Before loading server image the default showing image.
                    R.drawable.loading //Error image if requested image dose not found on server.
            )
    );

    Viewholder.CircularNetworkImageView.setImageUrl(getDataAdapter1.getImageServerUrl(), imageLoader1);

    Viewholder.ImageTitleNameView.setText(getDataAdapter1.getImageTitleName());
    Viewholder.UserAge.setText(getDataAdapter1.getImageAge());
    Viewholder.User_Gender.setText(getDataAdapter1.getImageGender());
    Viewholder.overflow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showPopupMenu(Viewholder.overflow,getDataAdapter1.getId());

        }
    });

}
/**
 * Showing popup menu when tapping on 3 dots
 */
private void showPopupMenu(View view, String position) {
    // inflate menu
    PopupMenu popup = new PopupMenu(context, view);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.menu_album, popup.getMenu());
    popup.setOnMenuItemClickListener(new MyMenuItemClickListener(position));
  //  Toast.makeText(context, position, Toast.LENGTH_SHORT).show();
    popup.show();
}

/**
 * Click listener for popup menu items
 */
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {
    private String position;
    public MyMenuItemClickListener(String position) {
        this.position=position;
    }

    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {

        switch (menuItem.getItemId()) {
            case R.id.Delete:
                Toast.makeText(context, "Delete option"+position, Toast.LENGTH_SHORT).show();
                delete(position);
                           return true;
            case R.id.Edit_Option:
                Toast.makeText(context, "Edit option", Toast.LENGTH_SHORT).show();
                return true;
            default:
        }
        return false;
    }

}
private void delete(String id){
    //http call for Delete the item and it's successfully work but my list is not updated
}
@Override
public int getItemCount() {

    return getDataAdapter.size();
}

class ViewHolder extends RecyclerView.ViewHolder{

    public TextView ImageTitleNameView,UserAge,User_Gender;
    public ImageView overflow;
    public Parse.CircularNetworkImageView CircularNetworkImageView ;

    public ViewHolder(View itemView) {

        super(itemView);

        ImageTitleNameView = (TextView) itemView.findViewById(R.id.textView_item);
        UserAge=(TextView) itemView.findViewById(R.id.age);
        User_Gender =(TextView) itemView.findViewById(R.id.gender);
        overflow = (ImageView) itemView.findViewById(R.id.overflow);

        CircularNetworkImageView = (CircularNetworkImageView) itemView.findViewById(R.id.VollyNetworkImageView1);

    }
}

【问题讨论】:

  • 删除项目后,从模型中删除该项目并添加 adapter.notifyItemRemoved(position);
  • 因为你的删除方法是空的...
  • @Selvin 实际上先生,我删除了删除方法代码,但它工作正常
  • @Divyesh 先生,我在调用删除方法后添加 getDataAdapter.notifyItemRemoved(position)
  • notifyItemRemoved 没有删除......你需要自己删除它......正如他在评论中所写的那样

标签: android listview android-recyclerview android-adapter


【解决方案1】:

首先改变这个:

Viewholder.overflow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showPopupMenu(Viewholder.overflow,position);

        }
    });

那就改这个方法:

private void showPopupMenu(View view, int position) {
    // inflate menu
    PopupMenu popup = new PopupMenu(context, view);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.menu_album, popup.getMenu());
    popup.setOnMenuItemClickListener(new MyMenuItemClickListener(position));
  //  Toast.makeText(context, position, Toast.LENGTH_SHORT).show();
    popup.show();
}

现在,在 menuitemClickListener 方法中改变这个:

private int position;
public MyMenuItemClickListener(int position) {
        this.position=position;
    }

最后,改变这个方法:

private void delete(int id){
    //http call for Delete the item and it's successfully work but my list is not updated
    getDataAdapter.remove(id);
    notifyItemRemoved(id);

}

【讨论】:

  • 我明白了,先生,我怎么知道我必须删除哪个项目而不将 getDataAdapter1.getId() 传递给删除方法
  • 您不需要传递 getDataAdapter1.getId()。只需传递位置或 getAdapterPosition()
  • 在出现应用程序崩溃问题后,我按照您的指导进行操作
  • 它现在可以工作了,我的项目没有从数据库中删除
  • 什么时候把你的项目存入数据库?
【解决方案2】:

只需调用 notifyDataSetChanged() 并从 arraylist 或列表中删除该项目!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2018-09-06
    • 1970-01-01
    相关资源
    最近更新 更多