2016-12-05 58 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或列表!