我试图在我的 MainActivity 打开之前显示加载屏幕一段时间。我正在使用 ViewSwitcher 首先加载加载屏幕布局,延迟后切换到主布局。这一切都很好。
MainActivity 中的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new LoadViewTask().execute();
}
private class LoadViewTask extends AsyncTask<Object, Object, Void>{
@Override
protected void onPreExecute(){
viewSwitcher = new ViewSwitcher(MainActivity.this);
viewSwitcher.addView(View.inflate(MainActivity.this, R.layout.loading_screen, null));
loadImg = (ImageView)findViewById(R.id.loadingLogo);
setContentView(viewSwitcher);
}
@Override
protected Void doInBackground(Object... params){
try{
synchronized(this){
int counter = 0;
while (counter <=4 ){
this.wait(850);
counter++;
}
}
}catch(InterruptedException e){
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result){
viewSwitcher.addView(View.inflate(MainActivity.this, R.layout.activity_main, null));
viewSwitcher.showNext();
initMainView(); //THIS INITIALIZES[SETS LISTENERS ETC] MY MAIN LAYOUT BUTTONS
}
}
问题是这个活动启动了其他几个活动以获得结果,当它们返回结果时,当我尝试访问 activity_main 布局中的任何元素时,我得到一个 NullPointerException。我发现每次打开活动时,活动都会尝试加载加载屏幕。我该如何防止这种情况?如何确保加载布局只被调用一次?
我在 MainActivity 的 onActivityResult 中试过这个
if(requestCode == 2){
if(resultCode == Activity.RESULT_OK){
if(viewSwitcher.getDisplayedChild() == 0){
Log.d(MTAG, " Inside view switcher is displaying child 0 ");
viewSwitcher.showNext();
initMainView();
}
continueButton.setVisibility(View.VISIBLE); //NULLPOINTEREXCEPTION HERE
}
}
但这不起作用。我还是 Android 编程新手,所以请尝试解释我做错了什么?