gpt4 book ai didi

android - onCreateView() 在自定义首选项中被调用得太频繁

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:47:47 27 4
gpt4 key购买 nike

我创建了一个具有以下构造函数的自定义首选项

public CoordinatesPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
setLayoutResource(R.layout.coordinates_preference);
}

我重写了 onCreateView() 所以它会像这样写入日志:

@Override
protected View onCreateView(ViewGroup parent)
{
Log.d("test", "Creating Preference view");
return super.onCreateView(parent);
}

并且我的日志中充满了“Creating Preference view” 消息,这会造成滚动时滞后的感觉,我相信转换 View 应该可以解决这个问题,我查看了首选项源代码如果转换 View 为空,则调用 onCreateView()

为了测试目的,我添加了这个方法:

@Override
public View getView(View convertView, ViewGroup parent)
{
if (convertView == null)
{
return super.getView(convertView, parent);
}
return super.getView(convertView, parent);
}

然后设置断点。我发现我的转换 View 几乎总是空的。因此它必须创建一个新 View ,这是为什么?以及如何改进这一点以避免延迟的首选项屏幕?

编辑:更改了 onCreate 的调用方式,现在它是所有 android 我只使用 setLayoutResource。但这并不能解决问题...

EDIT2:我使用了 Debug.StartMethodTracing() 并且发现我怀疑 55% 的时间花费(当我只是上下滚动时)花费在通货膨胀上当 convertView 为 null 时,从 getView() 调用的方法 onCreateView() 的首选项。

谢谢,杰森

最佳答案

我不知道您在此自定义首选项中实现了什么,但也许父类(super class)不知道如何根据您的首选项创建合适的 View ?

来自文档:

protected View onCreateView (ViewGroup parent)

Since: API Level 1 Creates the View to be shown for this Preference in the PreferenceActivity. The default behavior is to inflate the main layout of this Preference (see setLayoutResource(int). If changing this behavior, please specify a ViewGroup with ID widget_frame. Make sure to call through to the superclass's implementation.

http://developer.android.com/reference/android/preference/Preference.html

我猜你已经在水平布局上设置了那个 id。

既然我在谈论它,为什么不在您正在膨胀的布局中包含这个水平布局?

关于android - onCreateView() 在自定义首选项中被调用得太频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com