Android MenuItem以编程方式抖动文本

Android MenuItem以编程方式抖动文本,android,Android,我有一个导航抽屉,里面有我通过编程添加的菜单项。单击浮动动作按钮后,我想让所有菜单项开始抖动(如通过动画移动) 我有一个如下定义的shake.xml文件 <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="150" android:fromXDelta="-10%" android:repeatCount

我有一个导航抽屉,里面有我通过编程添加的菜单项。单击浮动动作按钮后,我想让所有菜单项开始抖动(如通过动画移动)

我有一个如下定义的shake.xml文件

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:duration="150"
        android:fromXDelta="-10%"
        android:repeatCount="5"
        android:repeatMode="reverse"
        android:toXDelta="10%"/>
</set>
是对视图(MainActivity)的引用。我也尝试过只使用
这个
加载动画
参数列表中的一些其他参数

这是周围的方法

public void removeListMode(List<SingleList> lists){
    for (SingleList list: lists){
        menu.add(0, list.getInternalListId(), 0, list.getName());
        menu.findItem(list.getInternalListId()).getActionView().startAnimation(AnimationUtils.loadAnimation(this.getApplicationContext(), R.anim.shake));
    }
}
public void removeListMode(列表){
用于(单列表:列表){
添加(0,list.getInternalListId(),0,list.getName());
menu.findItem(list.getInternalListId()).getActionView().startAnimation(AnimationUtils.loadAnimation(this.getApplicationContext(),R.anim.shake));
}
}

我以编程方式添加菜单项,因此我认为布局资源文件不太重要。

第一步是了解
null
的确切含义

NullPointerException: Attempt to invoke method 'startAnimation(Animation)' on a null object reference
如果仔细阅读您的异常,您会注意到它说它正试图对空引用调用
startAnimation

getActionView().startAnimation());
如果你看一下你的代码,你会发现
getActionView()
是在
startAnimation()之前调用的。这意味着您的
getActionView()
正在返回
null

NullPointerException: Attempt to invoke method 'startAnimation(Animation)' on a null object reference
因此,现在我们了解到我们的
actionView
null
,我们可以尝试解决这个问题

public void removeListMode(List<SingleList> lists){
    for (SingleList list: lists){
        menu.add(0, list.getInternalListId(), 0, list.getName());
        menu.findItem(list.getInternalListId()).getActionView().startAnimation(...);
    }
}
您只传递了一个
id
和一个
名称
——没有定义
图标
动作视图
。这就是
actionView
null
的原因

NullPointerException: Attempt to invoke method 'startAnimation(Animation)' on a null object reference
根据所需的
actionView
类型,您需要找到正确的设置方法。例如,你可以这样做

public void removeListMode(List<SingleList> lists){
    for (SingleList list: lists){
        // menu.add returns the MenuItem that is added.
        MenuItem item = menu.add(0, list.getInternalListId(), 0, list.getName());
        item.setActionView(R.layout.actionbar_indeterminate_progress);
    }
}
public void removeListMode(列表){
用于(单列表:列表){
//menu.add返回已添加的菜单项。
MenuItem item=menu.add(0,list.getInternalListId(),0,list.getName());
item.setActionView(R.layout.actionbar\u不确定\u进度);
}
}

您-可能-无法立即添加动画,这取决于方法以及它在菜单膨胀中的工作方式。但你应该能找到答案

您应该添加更多详细信息,例如菜单资源,以及更多关于如何实际调用此函数的代码-一行不能提供太多上下文。那么
null
到底是什么?好的,我添加了更多信息@Advice Dog