2016-12-05 56 views
0

实际上,这是我第一次使用RecyclerView,我尝试从列表中删除该项目作为用户查看从菜单项中单击删除按钮.... 但点击在删除选项我的项目被删除我的数据库,但我的适配器不更新...... 帮助我,我怎么设置我的适配器想要在RecyclerView中删除后更新我的ListView

我的代码:

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); 

    } 
} 
+1

删除项目后,从模型中删除该项目,并添加adapter.notifyItemRemoved(位置); –

+0

,因为你的删除方法是空的... – Selvin

+0

@Selvin实际上先生我删除删除方法代码,但它工作正常 – techDigi

回答

2

第一个变化是:

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; 
    } 

最后,chnage这种方法:

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); 

} 
+0

我得到它爵士队胜我怎么能知道我必须要删除的项目,而没有经过** getDataAdapter1.getId() **的删除方法 – techDigi

+0

你不需要通过getDataAdapter1.getId() 。只是通过位置或getAdapterPosition() –

+0

我这样做是为u引导我BT该应用程序崩溃的问题后出现 – techDigi

1

就叫notifyDataSetChanged()和删除该项目从arraylist或列表!