2017-08-07 14 views
4

を働いていない私はここにコードRecyclerview notifyDataSetChanged();

public class ScannedCodesAdapter extends RecyclerView.Adapter<ScannedCodesAdapter.ViewHolder> { 

private List<CodeItem> mList; 
private Context mContext; 
private OnItemClickListener mClick; 

public ScannedCodesAdapter(List<CodeItem> list, Context context, OnItemClickListener click) { 
    mList = list; 
    mContext = context; 
    mClick = click; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    ScanProductCodeItemBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), 
      R.layout.scan_product_code_item, parent, false); 
    return new ViewHolder(mBinding); 
} 

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

    CodeItem item = mList.get(position); 
    String code = item.getCode(); 
    holder.binding.adapterCode.setText(code); 
    int num = position + 1; 
    if (mList != null) 
     holder.binding.adapterNum.setText(num + " "); 
    if ((position % 2) == 0) { 
     holder.itemView.setBackgroundResource(R.color.white); 
    } else { 
     holder.itemView.setBackgroundResource(R.color.color2); 
    } 

    if (item.selected) { 
     holder.binding.adapterDelete.setVisibility(View.VISIBLE); 
    } else { 
     holder.binding.adapterDelete.setVisibility(View.GONE); 
    } 

    holder.itemView.setOnClickListener(view -> { 
     for (CodeItem m : mList) { 
      m.selected = false; 
     } 
     item.selected = true; 
     notifyDataSetChanged(); 
    }); 
    holder.binding.adapterDelete.setOnClickListener(view -> 
    { 
     // mClick.onClick(view, position); 
     //notifyItemRemoved(position); 

     SQLiteDataBaseHandler handler = new SQLiteDataBaseHandler(mContext); 
     CodeItem codeItem = handler.getCodeItem(code); 
     if (item != null) { 
     handler.deleteCode(codeItem); 
     notifyDataSetChanged(); 
    }); 

} 

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

public class ViewHolder extends RecyclerView.ViewHolder { 
    ScanProductCodeItemBinding binding; 

    public ViewHolder(ScanProductCodeItemBinding binding) { 
     super(binding.getRoot()); 
     this.binding = binding; 
    } 
} 

の下に使用して項目を削除した後に更新していないRECYCLER RecyclerViewから項目を削除して、もう一度リストを更新しようとしています。 私は戻って、リストを更新だけ来る場合。また、アクティビティから削除するためにOnItemClickListenerを試しました。 notifyDataSetChanged();私はこれを試して、私はnotifyItemRemoved(位置)を試した。しかし、働いていない 誰もがこれを行うためのアイデアを提案??

+0

はあなたhandler.deleteCode(codeItemを)ん。 mListを更新しますか? deleteCodeメソッドのコードを追加できますか? –

+0

公共ボイドdeleteCode(CodeItem codeItem){ SQLiteDatabase DB = this.getWritableDatabase()。 db.delete(TABLE_CODE、KEY_CODE + "=?"、 新しいString [] {String.valueOf(codeItem.getStatus())}); db.close()。 } これは、商品を削除するためのコードです – AngelJanniee

+0

下記の私の答えを参照してください。あなたのmListがあなたのnotifyDataSetを変更していないので、動作しません。それを入力すると、アダプターが移入されるリストが変更されます。 –

答えて

4

コードを更新する必要があります。あなたのdeleteCode法に基づいて、あなたのmListは、deleteに変更取得されていません。 notifyDataSetChangedは、アダプタを移入する基になるリストが変更された場合にのみ機能します。

ですから、だからあなたのコードのように変更しnotifyDataSetChanged

を呼び出す前に、あなたのmListを更新する必要があります -

holder.binding.adapterDelete.setOnClickListener(view -> 
{ 
    //Remove from list 
    mList.remove(position); 
    notifyDataSetChanged(); 
    //...delete from db ... 
    SQLiteDataBaseHandler handler = new SQLiteDataBaseHandler(mContext); 
    CodeItem codeItem = handler.getCodeItem(code); 
    if (item != null) { 
    handler.deleteCode(codeItem); 

}); 
+0

ええ、ありがとう@kapsym、私はこの場合、リスト内のアイテムを削除しませんでした。 – AngelJanniee

+1

@AngelJanniee素晴らしい。お力になれて、嬉しいです :) –

0

あなたのデータList<CodeItem> mListnotifyDataSetChanged呼び出し前に変更されていません。 notifyDataSetChangedコールの前に、リストから適切なアイテムを削除してください。

2
holder.binding.adapterDelete.setOnClickListener(view -> 
    { 
     //Remove from list 
     mList.remove(position); 
     notifyDataSetChanged(); 
     //...delete from db ... 
     SQLiteDataBaseHandler handler = new SQLiteDataBaseHandler(mContext); 
     CodeItem codeItem = handler.getCodeItem(code); 
     if (item != null) { 
     handler.deleteCode(codeItem); 

    }); 
関連する問題