Android:从回收器适配器更改购物车菜单徽章计数器
我正在尝试开发电子商务类型的应用程序,用户可以在其中添加项目到购物车。但我无法从适配器更新购物车徽章计数器。 这是我的应用程序的截图 我在片段内部使用回收器视图。我指的是下面的菜单项计数链接 我的问题是无法从适配器访问菜单项 这是我的片段代码 PriceListFragment.java Single_DesignAdapter.javaAndroid:从回收器适配器更改购物车菜单徽章计数器,android,android-menu,android-recyclerview,Android,Android Menu,Android Recyclerview,我正在尝试开发电子商务类型的应用程序,用户可以在其中添加项目到购物车。但我无法从适配器更新购物车徽章计数器。 这是我的应用程序的截图 我在片段内部使用回收器视图。我指的是下面的菜单项计数链接 我的问题是无法从适配器访问菜单项 这是我的片段代码 PriceListFragment.java Single_DesignAdapter.java 公共类单_指定适配器扩展了RecyclerView.Adapter{ 公共阵列列表设计列表; 私人语境; 私人停车场停车场停车场停车场停车场停车场停车场停
公共类单_指定适配器扩展了RecyclerView.Adapter{
公共阵列列表设计列表;
私人语境;
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
公共单_指定适配器(上下文上下文、ArrayList设计列表){
this.designList=设计列表;
this.context=上下文;
this.layoutInflater=layoutInflater.from(上下文);
}
@凌驾
public ViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=布局更平坦。充气(R.layout.single_design,parent,false);
返回新的ViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(最终ViewHolder,内部位置){
设计=设计列表。获取(位置);
holder.tvQuality.setText(design.qualityName);
holder.tvDesign.setText(design.designName);
holder.tvShade.setText(设计名称);
如果(!design.discPercent.等于(“0”)){
holder.tvDisPer.setText(“-”+design.dispercent+“%”);
holder.TVAMUNT.setPaintFlags(holder.TVAMUNT.getPaintFlags()| Paint.STRIKE_至_TEXT_标志);
int a=整数.parseInt(设计量);
浮点数b=浮点数。解析浮点数(设计百分比)/100;
holder.tvAmount.setText(“₹ " + 设计(数量);
int c=(int)(a*b);
int d=a-c;
holder.tvdiscament.setText(“₹ “+d);
毕加索.with(context).load(design.image).into(holder.ivDesign);
}否则{
holder.tvAmount.setText(“₹ “+设计金额);
毕加索.with(context).load(design.image).into(holder.ivDesign);
支架.tvDisPer.setVisibility(视图.不可见);
holder.tvDiscAmt.setVisibility(视图不可见);
}
holder.btAdd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
holder.llAdd.setVisibility(视图已消失);
holder.llPlusMinus.setVisibility(View.VISIBLE);
}
});
holder.btPlus.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(Integer.parseInt(holder.btpcscont.getText().toString())>=1){
int a=Integer.parseInt(holder.btpcscont.getText().toString());
int x=a++;
holder.btpcscont.setText(Integer.toString(a));
}
}
});
holder.btemission.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(Integer.parseInt(holder.btpcscont.getText().toString()),您可以使用接口在片段和适配器之间进行通信
例如:
public interface CallbackInterface {
void onCall();
}
在onCreateView
中的PriceListFragment
中执行以下操作:
CallbackInterface callback = new CallbackInterface{
@Override
public void onCall() {
if(itemCart!=null){
//code to increment badge
}
}
};
并将回调传递给适配器的构造函数,然后在那里使用它。在片段单击事件中:
((MainActivity) getActivity()).createCartBadge("value");
您的活动包含以下方法:
public void createCartBadge(int i) {
MenuItem cartItem = mToolbarMenu.findItem(R.id.cart);
LayerDrawable localLayerDrawable = (LayerDrawable) cartItem.getIcon();
Drawable cartBadgeDrawable = localLayerDrawable
.findDrawableByLayerId(R.id.ic_badge);
BadgeDrawable badgeDrawable;
if ((cartBadgeDrawable != null)
&& ((cartBadgeDrawable instanceof BadgeDrawable))
&& (i < 10)) {
badgeDrawable = (BadgeDrawable) cartBadgeDrawable;
} else {
badgeDrawable = new BadgeDrawable(MainActivity.this);
}
badgeDrawable.setCount(i);
localLayerDrawable.mutate();
localLayerDrawable.setDrawableByLayerId(R.id.ic_badge, badgeDrawable);
cartItem.setIcon(localLayerDrawable);
}
public-void-createCartBadge(inti){
MenuItem cartItem=mToolbarMenu.findItem(R.id.cart);
LayerDrawable localLayerDrawable=(LayerDrawable)cartItem.getIcon();
可绘制cartBadgeDrawable=localLayerDrawable
.finddrawableBayerId(R.id.ic_徽章);
獾可拔獾可拔;
如果((cartBadgeDrawable!=null)
&&((BadgeDrawable的cartBadgeDrawable实例)
&&(i<10)){
badgeDrawable=(badgeDrawable)cartBadgeDrawable;
}否则{
badgeDrawable=新的badgeDrawable(MainActivity.this);
}
可读取的设置计数(i);
localLayerDrawable.mutate();
localLayerDrawable.setDrawableByLayerId(R.id.ic_badge,badgeDrawable);
设置图标(localLayerDrawable);
}
您的适配器中已经有了上下文
。您可以将其转换为活动
。这样您就可以访问菜单
//when item is added or removed
((Activity)this.context).invalidateOptionsMenu()
在片段中。onCreateOptionsMenu()
您可以继续并设置项目计数您可以在TextView
中使用徽章样式现在,您只需调整TextView位置,使其看起来像徽章
<TextView
android:id="@+id/fabCounter"
style="@style/Widget.Design.FloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:padding="5dp"
android:text="-9"
android:textColor="@android:color/black"
android:textSize="14sp" />
制作自定义侦听器界面并使用它更改徽章文本。在我的应用程序中使用了相同的徽章
public void createCartBadge(int i) {
MenuItem cartItem = mToolbarMenu.findItem(R.id.cart);
LayerDrawable localLayerDrawable = (LayerDrawable) cartItem.getIcon();
Drawable cartBadgeDrawable = localLayerDrawable
.findDrawableByLayerId(R.id.ic_badge);
BadgeDrawable badgeDrawable;
if ((cartBadgeDrawable != null)
&& ((cartBadgeDrawable instanceof BadgeDrawable))
&& (i < 10)) {
badgeDrawable = (BadgeDrawable) cartBadgeDrawable;
} else {
badgeDrawable = new BadgeDrawable(MainActivity.this);
}
badgeDrawable.setCount(i);
localLayerDrawable.mutate();
localLayerDrawable.setDrawableByLayerId(R.id.ic_badge, badgeDrawable);
cartItem.setIcon(localLayerDrawable);
}
//when item is added or removed
((Activity)this.context).invalidateOptionsMenu()
<TextView
android:id="@+id/fabCounter"
style="@style/Widget.Design.FloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:padding="5dp"
android:text="-9"
android:textColor="@android:color/black"
android:textSize="14sp" />