购物车图标不出现在行动栏中的计数器

时间:2015-03-22 07:02:02

标签: android xml android-actionbar

我有一个操作栏菜单,右上方有三个点附近的购物车图标。图标正常显示。

菜单/ menu.xml中的

我调用了以下内容:

    <item
    android:id="@+id/action_cart"
    style="@android:style/Widget.ActionButton"
    android:icon="@drawable/cart"
    android:orderInCategory="1000"
    android:showAsAction="ifRoom"
    android:title="@string/action_cart"/>

现在我正在尝试根据项目的点击添加计数器。为此我在布局文件夹中添加了以下xml。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
style="@android:style/Widget.ActionButton"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:clickable="true"
android:gravity="center"
android:orientation="vertical" >

<ImageView
    android:id="@+id/carticon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="0dp"
    android:contentDescription="@string/cart"
    android:gravity="center"
    android:src="@drawable/cart" />


<TextView
    android:id="@+id/cart_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@id/carticon"
    android:layout_alignTop="@id/carticon"
    android:layout_marginRight="0dp"
    android:layout_marginTop="3dp"
    android:background="@drawable/cart_round"
    android:gravity="center"
    android:minWidth="17sp"
    android:paddingBottom="1dp"
    android:paddingLeft="4dp"
    android:paddingRight="4dp"
    android:text="@null"
    android:textColor="#ffffffff"
    android:textSize="12sp"
    tools:ignore="RtlHardcoded" />

    </RelativeLayout>

然后在我的片段文件中。我像这样传递xml:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{
    inflater.inflate(R.menu.main, menu);

    RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.action_cart).getActionView();
    TextView tv = (TextView) badgeLayout.findViewById(R.id.cart_number);
    tv.setText("12");
}

这里我点击一个项目设置计数器:

 gridView.setOnItemClickListener(new OnItemClickListener() 
    {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
        {
            itemsInCart = itemsInCart + 1;
            //cartTV.setText(String.valueOf(itemsInCart));
            Log.e("ACTION BAR","CART" +itemInCart);
        }

    });


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) 
{
    if (rootView != null) 
    {
        ViewGroup parent = (ViewGroup) rootView.getParent();

        if (parent != null)
            parent.removeView(rootView);
    }
    try 
    {
        rootView = inflater.inflate(R.layout.gridlist, container, false);
    } 
    catch (InflateException e) 
    {

    }

    setHasOptionsMenu(true);
}

没有任何东西出现..并给出错误。当我从列表视图中单击其中一个项目时。

但是我得到了NPE错误:

     03-22 12:23:45.598: E/AndroidRuntime(12865): FATAL EXCEPTION: main
     03-22 12:23:45.598: E/AndroidRuntime(12865): java.lang.NullPointerException
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at com.ylg.link.Link_GridActivity$1.onItemClick(Link_GridActivity.java:163)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.widget.AdapterView.performItemClick(AdapterView.java:298)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2788)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.widget.AbsListView$1.run(AbsListView.java:3463)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.os.Handler.handleCallback(Handler.java:730)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.os.Handler.dispatchMessage(Handler.java:92)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.os.Looper.loop(Looper.java:137)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at android.app.ActivityThread.main(ActivityThread.java:5103)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at java.lang.reflect.Method.invokeNative(Native Method)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at java.lang.reflect.Method.invoke(Method.java:525)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
     03-22 12:23:45.598: E/AndroidRuntime(12865):    at dalvik.system.NativeStart.main(Native Method)

这里可能有什么问题?

2 个答案:

答案 0 :(得分:2)

你应该改变

RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.cart_number).getActionView();
cartTV = (TextView) badgeLayout.findViewById(R.id.action_cart);

RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.action_cart).getActionView();
cartTV = (TextView) badgeLayout.findViewById(R.id.cart_number);

因为您的TextView ID为cart_number。这不是action_cart

答案 1 :(得分:0)

但是如果你使用AppCompat,你应该在代码中设置ActionLayout 它肯定会奏效。

MenuItem item = menu.findItem(R.id.action_cart);
    MenuItemCompat.setActionView(item, R.layout.action_cart);
    RelativeLayout relativeLayout = (RelativeLayout) MenuItemCompat.getActionView(item);
    TextView textView = (TextView) relativeLayout.findViewById(R.id.cart_number);
    textView.setText("1");