Android 回收器查看项目未更改。NotifyDataSetChanged不工作
我正在开发一个android应用程序,显示可供出售的物品列表。我正在使用Android 回收器查看项目未更改。NotifyDataSetChanged不工作,android,header,adapter,android-recyclerview,notifydatasetchanged,Android,Header,Adapter,Android Recyclerview,Notifydatasetchanged,我正在开发一个android应用程序,显示可供出售的物品列表。我正在使用回收器视图显示列表。我有一个用于回收器视图的标题,标题有3个按钮用于3个类别(全部、蔬菜、非蔬菜)以及膳食类型(早餐/零食)。 我在回收者视图下方有一个底部栏,它有一个按钮来显示购物车。按下按钮打开另一个活动,列出购物车中的所有项目 用户可以增加或减少购物车中的商品数量。 当用户在修改购物车内容(增加/减少数量)后从购物车返回菜单页面时,有时相同的数量不会反映在菜单页面上。当用户从购物车进入菜单页面时,我会通知适配器。在我滚
回收器视图
显示列表。我有一个用于回收器视图的标题
,标题有3个按钮
用于3个类别(全部、蔬菜、非蔬菜)以及膳食类型(早餐/零食)。
我在回收者视图下方有一个底部栏,它有一个按钮来显示购物车。按下按钮
打开另一个活动
,列出购物车中的所有项目
用户可以增加或减少购物车中的商品数量。
当用户在修改购物车内容(增加/减少数量)后从购物车返回菜单页面时,有时相同的数量不会反映在菜单页面上。当用户从购物车进入菜单页面时,我会通知适配器。在我滚动列表后,它会被更改
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.CustomViewHolder> {
public RecyclerViewAdapter(Context context, List<MenuDescription> listOrder, DatabaseHandlerForCartAndMenu db,
List<MenuDescription> vegList, List<MenuDescription> nonVegList,
Tracker tracker, ArrayList<HashMap<String, String>> mealTypeList,
ArrayList<MenuDescription> firstMealTypeList, RecyclerView recyclerView) {
this.context = context;
this.db = db;
this.listOrder = firstMealTypeList;
this.vegList = vegList;
this.nonVegList = nonVegList;
this.completeList = firstMealTypeList;
this.tracker = tracker;
this.mealTypeList = mealTypeList;
this.globalList = listOrder;
mealTypeViewArray = new View[mealTypeList.size()];
previous_meal_type_id = mealTypeList.get(0).get(Constants.MEALTYPE_MENUID);
first_date = mealTypeList.get(0).get(Constants.DATE);
this.recyclerView = recyclerView;
nothingForThisCategory = Snackbar.make(recyclerView, "Nothing is present for this category", Snackbar.LENGTH_INDEFINITE);
}
@Override
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
menuList = view;
return new CustomViewHolder(view, viewType);
} else if (viewType == TYPE_HEADER) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.header, parent, false);
return new CustomViewHolder(view, viewType);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerViewAdapter.CustomViewHolder holder, int position) {
try {
if (holder.HolderId == 1) {
if (nothingForThisCategory.isShown())
nothingForThisCategory.dismiss();
final MenuDescription menu = listOrder.get(position - 1);
if (menu.getAvailable() >= 1) {
holder.addSubtractButtonsLayout.setVisibility(View.VISIBLE);
holder.overlayView.setVisibility(View.GONE);
holder.soldOutText.setVisibility(View.GONE);
} else {
holder.addSubtractButtonsLayout.setVisibility(View.INVISIBLE);
holder.overlayView.setVisibility(View.VISIBLE);
holder.soldOutText.setVisibility(View.VISIBLE);
}
if (menu.getDecr_button_visibility() == 1) {
holder.addSubtractLinearLayout.setVisibility(View.VISIBLE);
holder.addButton.setVisibility(View.GONE);
} else {
holder.addSubtractLinearLayout.setVisibility(View.GONE);
holder.addButton.setVisibility(View.VISIBLE);
}
holder.title.setText(menu.getName() + "");
holder.price.setText(menu.getPrice() + "");
holder.quant.setText(menu.getQuantity() + "");
holder.description.setText(menu.getDescription());
try {
Glide.with(context).load(menu.getImage_path()).placeholder(R.drawable.v3_placeholder_image).fitCenter().into(holder.image);
} catch (Exception e) {
e.printStackTrace();
}
holder.addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tx = (TextView) ((Activity) context).findViewById(R.id.total);
totalPrice = (TextView) ((Activity) context).findViewById(R.id.totalPrice);
menu.setDecr_button_visibility(1);
Constants.total_items_in_cart++;
Constants.total_price_of_cart += menu.getPrice();
totalPrice.setText(Constants.total_price_of_cart + "");
tx.setText(Constants.total_items_in_cart + "");
try {
if (!db.CheckIsItemAlreadyInDBorNot(menu.getItem_id(), "cart", menu.getMenu_id())) {
menu.incrQuantity();
db.addDataToCartTable(menu);
// cart_items.add(menu);
holder.quant.setText(menu.getQuantity() + "");
} else {
menu.incrQuantity();
db.updateQuantityInCartTable(menu.getQuantity(), menu.getItem_id(), menu.getMenu_id());
holder.quant.setText(menu.getQuantity() + "");
}
} catch (Exception e1) {
e1.printStackTrace();
}
holder.addSubtractLinearLayout.setVisibility(View.VISIBLE);
holder.addButton.setVisibility(View.GONE);
if (Constants.total_items_in_cart == 1) {
RecyclerViewMainActivity.bottomBarUp();
}
notifyDataSetChanged();
}
});
holder.incrementButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tx = (TextView) ((Activity) context).findViewById(R.id.total);
totalPrice = (TextView) ((Activity) context).findViewById(R.id.totalPrice);
menu.setDecr_button_visibility(1);
Constants.total_items_in_cart++;
Constants.total_price_of_cart += menu.getPrice();
totalPrice.setText(Constants.total_price_of_cart + "");
tx.setText(Constants.total_items_in_cart + "");
try {
if (!db.CheckIsItemAlreadyInDBorNot(menu.getItem_id(), "cart", menu.getMenu_id())) {
menu.incrQuantity();
db.addDataToCartTable(menu);
holder.quant.setText(menu.getQuantity() + "");
} else {
menu.incrQuantity();
db.updateQuantityInCartTable(menu.getQuantity(), menu.getItem_id(), menu.getMenu_id());
holder.quant.setText(menu.getQuantity() + "");
}
} catch (Exception e1) {
e1.printStackTrace();
}
notifyDataSetChanged();
}
});
holder.decrementButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
tx = (TextView) ((Activity) context).findViewById(R.id.total);
totalPrice = (TextView) ((Activity) context).findViewById(R.id.totalPrice);
int qu = menu.getQuantity();
if (qu > 0) {
if (Constants.total_items_in_cart > 0) {
Constants.total_items_in_cart--;
tx.setText(Constants.total_items_in_cart + "");
Constants.total_price_of_cart -= menu.getPrice();
totalPrice.setText(Constants.total_price_of_cart + "");
}
if (Constants.total_items_in_cart == 0) {
RecyclerViewMainActivity.bottomBarDown();
}
menu.decrQuantity();
if (menu.getQuantity() == 0) {
holder.addSubtractLinearLayout.setVisibility(View.GONE);
holder.addButton.setVisibility(View.VISIBLE);
menu.setDecr_button_visibility(0);
try {
db.DeleteCartItem(menu.getItem_id(), menu.getMenu_id());
} catch (Exception e1) {
e1.printStackTrace();
}
} else {
try {
db.updateQuantityInCartTable(menu.getQuantity(), menu.getItem_id(), menu.getMenu_id());
} catch (Exception e1) {
e1.printStackTrace();
}
}
holder.quant.setText(menu.getQuantity() + "");
notifyDataSetChanged();
}
}
});
} else if (holder.HolderId == TYPE_HEADER) {
final LayoutInflater vi = (LayoutInflater) context.getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
try {
for (int i = 0; i < mealTypeList.size(); i++) {
if (!mealTypeList.get(i).get(Constants.DATE).equals(first_date))
date_drop_down_clickable = true;
}
if (!date_drop_down_clickable)
holder.dateDropDown.setVisibility(View.GONE);
else holder.dateDropDown.setVisibility(View.VISIBLE);
} catch (Exception e) {
}
String frmDateStr;
try {
if (Constants.dateClickedFirstTimeByDefault) {
if (!Constants.dateSelected.equals("")) {
dateClicked(Constants.dateSelected);
previous_meal_type_id = "";
mealTypeClicked(mealTypeIdSelectedBeforeCartOpened, indexBeforeCartOpened);
} else {
String dateString = mealTypeList.get(0).get(Constants.DATE);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US);
Date date = sdf.parse(dateString);
frmDateStr = getFormattedDate(date);
AttributedString as1 = new AttributedString(frmDateStr);
as1.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 2, 3);
holder.displaying_date.setText(frmDateStr);
dateClicked(dateString);
}
Constants.dateClickedFirstTimeByDefault = false;
}
if (Constants.keepAddingButtonOnCartPageClicked) {
Constants.keepAddingButtonOnCartPageClicked = false;
previous_meal_type_id = "";
mealTypeClicked(mealTypeIdSelectedBeforeCartOpened, indexBeforeCartOpened);
notifyDataSetChanged();
}
} catch (Exception e) {
e.printStackTrace();
}
holder.dateDropDownLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (date_drop_down_clickable) {
if (holder.horizontalScrollViewDateLayout.getVisibility() == View.GONE) {
holder.dateDropDown.setImageResource(R.drawable.pullup_red);
holder.horizontalScrollViewDateLayout.setVisibility(View.VISIBLE);
holder.dateLinearLayout.removeAllViews();
String previousDate = "";
int day = 0;
for (int i = 0; i < mealTypeList.size(); i++) {
if (!previousDate.equals(mealTypeList.get(i).get(Constants.DATE))) {
previousDate = mealTypeList.get(i).get(Constants.DATE);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US);
try {
Date date = sdf.parse(previousDate);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
day = cal.get(Calendar.DATE);
} catch (ParseException e) {
e.printStackTrace();
}
View dateView = vi.inflate(R.layout.date_layout, null);
final TextView dateTextView = (TextView) dateView.findViewById(R.id.dateTextView);
if (day / 10 == 0)
dateTextView.setText("0" + Integer.toString(day));
else dateTextView.setText(Integer.toString(day));
dateTextView.setTag(previousDate);
if (i == previous_date_selected) {
dateTextView.setBackgroundResource(R.drawable.round_button_add);
dateTextView.setTextColor(context.getResources().getColor(R.color.white));
} else {
dateTextView.setBackgroundResource(0);
dateTextView.setTextColor(context.getResources().getColor(R.color.Description));
}
holder.dateLinearLayout.addView(dateView);
final String finalPreviousDate = previousDate;
final int finalI = i;
dateTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.horizontalScrollViewDateLayout.setVisibility(View.GONE);
holder.dateDropDown.setImageResource(R.drawable.dropdown_red);
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd", Locale.US);
Date date = sdf.parse(dateTextView.getTag().toString());
String formattedDate = getFormattedDate(date);
AttributedString as1 = new AttributedString(formattedDate);
as1.addAttribute(TextAttribute.SUPERSCRIPT, TextAttribute.SUPERSCRIPT_SUPER, 2, 3);
holder.displaying_date.setText(formattedDate);
} catch (Exception e) {
}
previous_date_selected = finalI;
dateClicked(finalPreviousDate);
addingMealTypeLayoutToUI(holder, vi);
}
});
}
}
} else {
holder.horizontalScrollViewDateLayout.setVisibility(View.GONE);
holder.dateDropDown.setImageResource(R.drawable.dropdown_red);
}
}
}
});
addingMealTypeLayoutToUI(holder, vi);
holder.all.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listOrder = completeList;
if (nothingForThisCategory.isShown())
nothingForThisCategory.dismiss();
if (listOrder.size() == 0) {
nothingForThisCategory = Snackbar.make(recyclerView, "Nothing is present for this category", Snackbar.LENGTH_INDEFINITE);
nothingForThisCategory.show();
}
previous_filter_selected = 0;
if (holder.buttonLayout.getVisibility() == View.VISIBLE)
holder.buttonLayout.setVisibility(View.GONE);
notifyDataSetChanged();
}
});
holder.veg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listOrder = vegList;
if (nothingForThisCategory.isShown())
nothingForThisCategory.dismiss();
if (listOrder.size() == 0) {
nothingForThisCategory = Snackbar.make(recyclerView, "Nothing is present for this category", Snackbar.LENGTH_INDEFINITE);
nothingForThisCategory.show();
}
previous_filter_selected = 1;
if (holder.buttonLayout.getVisibility() == View.VISIBLE)
holder.buttonLayout.setVisibility(View.GONE);
notifyDataSetChanged();
}
});
holder.nonVeg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listOrder = nonVegList;
if (nothingForThisCategory.isShown())
nothingForThisCategory.dismiss();
if (listOrder.size() == 0) {
nothingForThisCategory = Snackbar.make(recyclerView, "Nothing is present for this category", Snackbar.LENGTH_INDEFINITE);
nothingForThisCategory.show();
}
previous_filter_selected = 2;
if (holder.buttonLayout.getVisibility() == View.VISIBLE)
holder.buttonLayout.setVisibility(View.GONE);
notifyDataSetChanged();
}
});
holder.filterLinearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (holder.buttonLayout.getVisibility() == View.VISIBLE)
holder.buttonLayout.setVisibility(View.GONE);
else if (holder.buttonLayout.getVisibility() == View.GONE)
holder.buttonLayout.setVisibility(View.VISIBLE);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void dateClicked(String dateValueSelected) {
mealTypeListForSelectDate = new ArrayList<>();
for (int i = 0; i < mealTypeList.size(); i++) {
if (dateValueSelected.equals(mealTypeList.get(i).get(Constants.DATE))) {
mealTypeListForSelectDate.add(mealTypeList.get(i));
previous_view_selected = 0;
Constants.dateSelected = dateValueSelected;
}
}
}
private void addingMealTypeLayoutToUI(RecyclerViewAdapter.CustomViewHolder holder, LayoutInflater vi) {
try {
holder.mealtype_layout.removeAllViews();
for (int i = 0; i < mealTypeListForSelectDate.size(); i++) {
HashMap<String, String> mealtype_hashmap = mealTypeListForSelectDate.get(i);
mealTypeViewArray[i] = vi.inflate(R.layout.meal_type_name_layout, null);
final TextView myButton = (TextView) mealTypeViewArray[i].findViewById(R.id.mealTypeTextView);
String mealType = mealtype_hashmap.get(Constants.MEAL_TYPE);
myButton.setText(mealType);
myButton.setTag(mealtype_hashmap.get(Constants.MEALTYPE_MENUID));
if (i == previous_view_selected) {
myButton.setBackgroundResource(R.drawable.header_meal_type_selected);
myButton.setTextColor(context.getResources().getColor(R.color.ColorPrimaryDark));
mealTypeClicked(myButton.getTag().toString(), i);
} else {
myButton.setBackgroundResource(R.drawable.header_meal_type_not_selected);
myButton.setTextColor(context.getResources().getColor(R.color.Description));
}
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT);
lp.topMargin = 10;
lp.weight = 1;
holder.mealtype_layout.addView(mealTypeViewArray[i], lp);
final int finalI = i;
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mealTypeClicked(myButton.getTag().toString(), finalI);
}
});
}
} catch (Exception e) {
}
}
private void mealTypeClicked(String mealTypeMenuId, int index) {
try {
if (!previous_meal_type_id.equals(mealTypeMenuId)) {
Constants.mealTypeMenuIdSelected = mealTypeMenuId;
List<MenuDescription> MealType_list = new ArrayList<>();
vegList.clear();
nonVegList.clear();
previous_view_selected = index;
for (int i = 0; i < globalList.size(); i++) {
if (mealTypeMenuId.equals(globalList.get(i).getMenu_id())) {
MealType_list.add(globalList.get(i));
}
}
for (int i = 0; i < MealType_list.size(); i++) {
if (MealType_list.get(i).getCatId().equals("true")) {
vegList.add(MealType_list.get(i));
} else if (MealType_list.get(i).getCatId().equals("false")) {
nonVegList.add(MealType_list.get(i));
}
}
try {
completeList = MealType_list;
if (previous_filter_selected == 0)
listOrder = completeList;
else if (previous_filter_selected == 1)
listOrder = vegList;
else if (previous_filter_selected == 2)
listOrder = nonVegList;
previous_meal_type_id = mealTypeMenuId;
mealTypeIdSelectedBeforeCartOpened = previous_meal_type_id;
indexBeforeCartOpened = index;
if (nothingForThisCategory.isShown())
nothingForThisCategory.dismiss();
if (listOrder.size() == 0) {
nothingForThisCategory = Snackbar.make(recyclerView, "Nothing is present for this category", Snackbar.LENGTH_INDEFINITE);
nothingForThisCategory.show();
}
notifyDataSetChanged();
} catch (Exception e) {
}
}
} catch (Exception e) {
}
}
@Override
public int getItemCount() {
return (null != listOrder ? listOrder.size() + 1 : 0);
}
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
private boolean isPositionHeader(int position) {
return position == 0;
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
公共RecycleServiceAdapter(上下文上下文、列表顺序、DatabaseHandlerForCart和菜单数据库、,
列出蔬菜列表,列出非蔬菜列表,
Tracker Tracker,ArrayList mealTypeList,
ArrayList firstMealTypeList,RecyclerView RecyclerView){
this.context=上下文;
这个.db=db;
this.listOrder=firstMealTypeList;
this.vegList=vegList;
this.noneglist=非eglist;
this.completeList=firstMealTypeList;
this.tracker=跟踪器;
this.mealTypeList=mealTypeList;
this.globalList=listOrder;
mealTypeViewArray=新视图[mealTypeList.size()];
previous\u meat\u type\u id=mealTypeList.get(0.get)(Constants.MEALTYPE\u MENUID);
first_date=mealTypeList.get(0.get(Constants.date));
this.recyclerView=recyclerView;
nothingForThisCategory=Snackbar.make(recyclerView,“此类别不存在任何内容”,Snackbar.LENGTH\u不确定);
}
@凌驾
public RecycleServiceAdapter.CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
if(viewType==类型\项){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.recycler\u视图,parent,false);
菜单列表=视图;
返回新的CustomViewHolder(视图,viewType);
}else if(viewType==类型\标题){
View=LayoutInflater.from(parent.getContext()).flate(R.layout.header,parent,false);
返回新的CustomViewHolder(视图,viewType);
}
返回null;
}
@凌驾
BindViewHolder上的公共无效(最终RecycleServiceAdapter.CustomViewHolder,int位置){
试一试{
if(holder.HolderId==1){
if(该类别的值为Nothing.isShown())
此类别没有任何内容。请退出();
final MenuDescription menu=listOrder.get(位置-1);
如果(menu.getAvailable()>=1){
holder.addSubtractButtonsLayout.setVisibility(View.VISIBLE);
holder.overlayView.setVisibility(View.GONE);
holder.soldOutText.setVisibility(View.GONE);
}否则{
holder.addSubtractButtonsLayout.setVisibility(视图.不可见);
holder.overlayView.setVisibility(视图可见);
holder.soldOutText.setVisibility(View.VISIBLE);
}
if(menu.getDecr_按钮_可见性()==1){
holder.AddLinearLayout.setVisibility(View.VISIBLE);
holder.addButton.setVisibility(View.GONE);
}否则{
holder.AddLinearLayout.setVisibility(View.GONE);
holder.addButton.setVisibility(View.VISIBLE);
}
holder.title.setText(menu.getName()+);
holder.price.setText(menu.getPrice()+);
holder.quant.setText(menu.getQuantity()+);
holder.description.setText(menu.getDescription());
试一试{
Glide.with(context).load(menu.getImage\u path()).placeholder(R.drawable.v3\u placeholder\u image).fitCenter()装入(holder.image);
}捕获(例外e){
e、 printStackTrace();
}
holder.addButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
tx=(TextView)((活动)上下文).findViewById(R.id.total);
totalPrice=(TextView)((活动)上下文).findViewById(R.id.totalPrice);
菜单。设置DECRU按钮的可见性(1);
常量。购物车++中的物品总数;
Constants.total_price_of_cart+=menu.getPrice();
totalPrice.setText(Constants.total_price_of_cart+“”);
tx.setText(常量.total_items_in_cart+“”);
试一试{
如果(!db.CheckIsItemAlreadyInDBorNot(menu.getItem_id(),“cart”,menu.getMenu_id())){
menu.incrQuantity();
db.addDataToCartTable(菜单);
//购物车项目。添加(菜单);
holder.quant.setText(menu.getQuantity()+);
}否则{
menu.incrQuantity();
db.updateQuantityInCartTable(menu.getQuantity(),menu.getItem_id(),menu.getMenu_id());
holder.quant.setText(menu.getQuantity()+);
}
}捕获(异常e1){
e1.printStackTrace();
}
holder.AddLinearLayout.setVisibility(View.VISIBLE);
holder.addButton.setVisibility(View.GONE);
if(Constants.total_购物车中的物品=1){