Android MenuItem以编程方式抖动文本
我有一个导航抽屉,里面有我通过编程添加的菜单项。单击浮动动作按钮后,我想让所有菜单项开始抖动(如通过动画移动) 我有一个如下定义的shake.xml文件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
<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