我在我的android应用程序中实现了 *** 作栏sherlock.此应用程序具有购物车功能. *** 作栏上有一个图标,可将用户带到购物车.当物品被添加到购物车并从购物车中移除时,我需要动态更改该图标.这是一个数字应该出现在 *** 作栏中的购物车图标的顶部.
以下是截图:
menu.xml文件:
<menu xmlns:androID="http://schemas.androID.com/apk/res/androID" > <item androID:ID="@+ID/scanner" androID:icon="@drawable/ic_nav_scanner" androID:showAsAction="always" androID:title="@string/scanner"/> <item androID:ID="@+ID/cart" androID:icon="@drawable/ic_nav_cart" androID:showAsAction="always" androID:title="@string/cart"/> <item androID:ID="@+ID/a_More" androID:icon="@drawable/ic_nav_more" androID:showAsAction="always" androID:title="@string/more"> <menu> <item androID:ID="@+ID/location" androID:icon="@drawable/ic_nav_dropdown_location" androID:showAsAction="always" androID:title="@string/location_action"/> <item androID:ID="@+ID/fav" androID:icon="@drawable/ic_nav_dropdown_favourite" androID:showAsAction="always" androID:title="@string/favourites"/> <item androID:ID="@+ID/info" androID:icon="@drawable/ic_nav_dropdown_information" androID:title="@string/information"/> </menu> </item></menu>
码:
@OverrIDe public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.aiwmain, menu); return super.onCreateOptionsMenu(menu); }@OverrIDe public boolean onoptionsItemSelected(MenuItem item) { super.onoptionsItemSelected(item); switch (item.getItemID()) { case R.ID.scanner: //scanner clicked break;}
任何有助于动态更改 *** 作栏上的购物车图标的帮助表示赞赏.
//编辑
我设法想出这个:
@OverrIDe public boolean onPrepareOptionsMenu(Menu menu) { DBManager db = DBManager.getSingletonInstance(); int cartItemCount = db.getCartItemCount(this); MenuItem cart = menu.findItem(R.ID.cart); MenuItem scanner = menu.findItem(R.ID.scanner); if(cartItemCount > 0){ //I want this item to be changed, I do not want to have seperate drawables for all numbers. cart.setIcon(R.drawable.arrow_left); } return super.onPrepareOptionsMenu(menu); }
解决方法:
我想出了解决我问题的答案,我为CART菜单项设计了一个自定义布局:
badge.xml:
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="48dp" androID:layout_height="fill_parent" androID:clickable="true" > <!-- Menu Item Image --> <ImageVIEw androID:ID="@+ID/img_vIEw" androID:layout_wIDth="48dp" androID:layout_height="fill_parent" androID:clickable="true" androID:background="@drawable/ic_nav_cart" /> <!-- Badge Count --> <TextVIEw androID:ID="@+ID/actionbar_notifcation_textvIEw" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:padding="10dp" androID:text="99" androID:textcolor="#9F2828" androID:textSize="14sp" androID:layout_toRightOf="@+ID/img_vIEw" androID:background="@drawable/cart_circle"/></relativeLayout>
在我的menu.xml中,我以这种方式包含它:
<item androID:ID="@+ID/cart" androID:actionLayout="@layout/badge" androID:icon="@drawable/ic_nav_cart" androID:showAsAction="always" androID:title="@string/cart"/>
然后在我的活动中我使用它像这样:
@OverrIDe public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getSupportMenuInflater(); inflater.inflate(R.menu.aiwmain, menu); //getting the count of cart items DBManager db = DBManager.getSingletonInstance(); int cartItemCount = db.getCartItemCount(this); badgeLayout = (relativeLayout) menu.findItem(R.ID.cart).getActionVIEw(); menu.getItem(1).getActionVIEw().setonClickListener(this); TextVIEw tv = (TextVIEw) badgeLayout.findVIEwByID(R.ID.actionbar_notifcation_textvIEw); tv.setText(""+cartItemCount); //do not show the count if count is 0 if(cartItemCount == 0){ tv.setVisibility(VIEw.GONE); } return super.onCreateOptionsMenu(menu); }
上述方法位于BaseActivity中,所有其他活动都从该BaseActivity继承.因此,您无需在所有活动中包含此内容.
要处理CART ICON的onClick,请在所有活动中执行此 *** 作:
public voID onClick(VIEw v) { // navigating to the cart details by checking the IDs of menu item and // clicked layout. if (v.getID() == R.ID.cart) { Intent order = new Intent(getApplicationContext(), CartDetailsActivity.class); startActivity(order); }}
参考:How to get text on an ActionBar Icon?
总结以上是内存溢出为你收集整理的android – 动态更改 *** 作栏sherlock中的菜单项全部内容,希望文章能够帮你解决android – 动态更改 *** 作栏sherlock中的菜单项所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)