【问题标题】:Android touch events before onCreate finished?onCreate完成之前的Android触摸事件?
【发布时间】:2013-11-27 12:09:51
【问题描述】:

Android 是否在 onCreate 完成之前开始处理屏幕触摸?我使用 setContentView,然后初始化一些东西,如果我真的很快并在活动打开后选择一个列表项,我会得到一个空指针,这只有在变量尚未初始化时才会发生。似乎在调用 setContentView 后,关于 onCreate 尚未完成,触摸正在处理,这是真的吗?我觉得很奇怪。

我写了一个简单的例子,所以你知道我的意思:

public class MainActivity extends FragmentActivity implements MainFragment.OnListItemSelected {

private List<String> mList;

@Override
public void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ...
    initialize();
    ...
}

private void initialize() {
    mList = new ArrayList{1,2,3};
}

 @Override
public void onListItemSelected(final int id) {
    do something with mList -> NullPointer if this called before initialize() was called
}

}

【问题讨论】:

  • 这个问题不需要代码

标签: android


【解决方案1】:

您是否尝试在代码中实现 ViewTreeObserver?

http://developer.android.com/reference/android/view/ViewTreeObserver.html

 vto = convertView.getViewTreeObserver();
                vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
                    public void onGlobalLayout() {
                        v.getViewTreeObserver().removeOnGlobalLayoutListener(this);  //vet inte om denna metod är nödvändig

                    }
               }});   

【讨论】:

    【解决方案2】:

    如果您看到您的列表 - 这意味着您在 Activity 的生命周期中远远超出了onCreate()。 所以这个 NullPointer 不是因为 initialize() 没有被调用。 您还可以在 initialize(), onCreate()onResume() 上添加日志输出并亲自查看。

    【讨论】:

    • 这是逻辑假设,也是我发现这个 NulPointerException 如此奇怪的原因。我会再看一下我的代码。
    • 如果您需要有关此问题的进一步帮助,您必须发布您的代码和堆栈跟踪
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    相关资源
    最近更新 更多