【问题标题】:Re-rendering Actionbar on back button press in Android在Android中按下后退按钮时重新渲染操作栏
【发布时间】:2014-01-15 12:12:30
【问题描述】:

我正在实现一个购物车 Android 应用程序,并在 ActionBar 上显示了一个自定义视图,该视图描述了其中没有商品的购物车。这在浏览产品和查看每个产品(显示在另一个活动中)时显示在操作栏上。从查看产品活动中,用户可以点击添加到购物车。单击将通过将数字增加 1 来更新自定义视图。

自定义视图是这样的:

但是现在当用户按下后退按钮时,它会转到上一个活动,并且操作栏上的自定义视图显示的是旧视图,其中项目数量较少。如何在按下后退按钮时更新操作栏的自定义视图

我的自定义视图是这样的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/actionbar_cart_layout"
android:layout_width="70dp"
android:layout_height="wrap_content" >
    <ImageView
        android:id="@+id/actionbar_cart_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center_vertical"
        android:src="@drawable/ic_actionbar_cart" 
        android:layout_alignParentRight="true"/>

    <TextView
        android:id="@+id/actionbar_cart_qty"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="right|center"
        android:layout_marginLeft="19dp"
        android:layout_marginTop="12dp"
        android:layout_alignLeft="@+id/actionbar_cart_image"
        android:text="0"
        android:textColor="#000000"
        android:textSize="14sp"
        android:textStyle="bold" />
 </RelativeLayout>

我正在处理这样的添加

LayoutInflater inflator = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflator.inflate(R.layout.menuitem_cart, null);
getSupportActionBar().setCustomView(view);

点击添加到购物车后,我会像这样更新视图

TextView cartQry = (TextView) view.findViewById(R.id.actionbar_cart_qty);
    int count = ShoppingCart.getInstance().getTotalItems();
    cartQry.setText(Integer.toString(count));

我正在使用最低 API 版本为 11 的 ActionBar Sherlock

【问题讨论】:

  • 在您的活动的 onResume 方法中更新您的操作栏图标..
  • 谢谢 - 它工作:)

标签: java android actionbarsherlock


【解决方案1】:

根据上面的评论 - 在 Fragment Activity 中覆盖 onResume() 方法

@Override
protected void onResume() {
    TextView cartQry = (TextView) view.findViewById(R.id.actionbar_cart_qty);
    int count = ShoppingCart.getInstance().getTotalItems();
    cartQry.setText(Integer.toString(count));

    super.onResume();
}

【讨论】:

  • 使用 invalidateOptionsMenu();
【解决方案2】:
@Override
protected void onResume() {
    invalidateOptionsMenu(); 
    super.onResume();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    相关资源
    最近更新 更多