我有一个操作栏菜单,右上方有三个点附近的购物车图标。图标正常显示。
菜单/ 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)
这里可能有什么问题?
答案 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");