我为我的应用SwitchPreference
制作了preferences
。
问题是,当我在&和/或相反,它正突然转动。
这是SwitchPreference
文件的代码:
preferences.xml
我是初学者,所以请合作&让我知道这里有什么问题。
提前致谢。
答案 0 :(得分:3)
我注意到一些不同的东西可能导致我的SwitchPreference
个对象缺少动画:
如果SwitchPreference
是设置活动中的第一个Preference
。
如果我延长SwitchPreference
并改为使用post describing a similar problem)。
为了避免第一个问题,我创建了一个DummyPreference
类,我将其用作Preference
中的第一个PreferenceScreen
。以下示例。
<强> DummyPreference.java 强>
public class DummyPreference extends Preference
{
public DummyPreference(Context context,AttributeSet attrs)
{
super(context,attrs);
}
@Override
public View getView(View convertView,ViewGroup parent)
{
View v = new View(getContext());
v.setVisibility(View.GONE);
return v;
}
}
<强> pref_whatever.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.exaple.DummyPreference/>
<!-- other preference controls here -->
</PreferenceScreen>
为了避免第二个问题,我不得不求助于在XML中使用android的普通旧Preference
类,并且我将所需的任何额外逻辑移到Activity
或{{ 1}}包含Fragment
个对象。
我知道这是一个老帖子。我希望将来可以帮助别人。
答案 1 :(得分:0)
我遇到了与Checkboxes类似的问题,我想这可能是同样的问题。问题行似乎在父类TwoStatePreference的setChecked()函数下。 notifyChanged()行实际上是告诉重绘自己的偏好,这意味着它会突然显示为已选中。您可以扩展SwitchPreference并只是覆盖该功能并对该行进行注释,它应该可以正常工作,只要您在该首选项中没有任何其他内容重绘自己。
@Override
public void setChecked(boolean checked) {
// Always persist/notify the first time; don't assume the field's default of false.
final boolean changed = mChecked != checked;
if (changed || !mCheckedSet) {
mChecked = checked;
mCheckedSet = true;
persistBoolean(checked);
if (changed) {
notifyDependencyChange(shouldDisableDependents());
//notifyChanged(); *******THIS IS REDRAWING THE VIEW IMMEDIATELY
}
}
}
答案 2 :(得分:0)
我也遇到了这个问题,我尝试过在stackoverflow中注意到的每个解决方案,但仍然无法解决问题。当你尝试扩展Preference的子类时,它似乎是一个安卓漏洞,动画会消失。请参阅此处了解bugtracker条目。
最后我找到了解决方案,我创建了一个扩展Preference的类,并设置了包含switch组件的布局,并处理了自定义类中的click事件,切换动画的工作正常。
xml文件大多如:
<com.test.MyPreference>
<!--can define custom_switch_layout.xml base on preference_material.xml-->
android:layout="@layout/custom_switch_layout"
android:key="new_switch"
android:title="pref_switch_title"</com.test.MyPreference>