我在MainActivity中加载一些数据并尝试在加载时显示启动画面。我不能使用其他活动,因为我只在主活动中加载数据,所以我使用对话框来显示图片。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
loading_dialog = new Dialog(MainActivity.this);
loading_dialog.setContentView(R.layout.loading);
loading_dialog.show();
Log.d(TAG,"show");
verifyPermissions(this);
res=new Resourses(this);
manager = new Manager(this, res);
loading_dialog.dismiss();
setContentView(R.layout.activity_main);
Log.d(TAG,"End");
view = (GLSurfaceView) findViewById(R.id.view);
view.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
view.setRenderer(manager);
additionalSkuList = new ArrayList<String>();
for(int i=0;i<10;i++)
{
additionalSkuList.add(res.id[i]);
}
String base64EncodedPublicKey;
base64EncodedPublicKey= getResources().getString(R.string.inappkey);
mHelper = new IabHelper(this, base64EncodedPublicKey);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
// Log.d("main", "m here");
if (!result.isSuccess()) {
// Oh noes, there was a problem.
Log.d(TAG, "Problem setting up In-app Billing: " + result);
}
// Hooray, IAB is fully set up!
isIAB = true;
Log.d(TAG,""+isIAB);
mHelper.queryInventoryAsync(true, additionalSkuList, mQueryFinishedListener);
// Log.d("main", "" + isIAB + " " + isLoad);
}
});
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
}
但是对话框没有显示,直到oncreate方法完成。如果我运行这个,我就看不到对话框了。如果我关闭loading_dialog.dismiss(),那么在加载所有数据后加载它。
任何人都可以发现问题吗?
解决:
问题是,除非您初始化渲染器的构造,否则setContentView不会启动。
所以我不得不在GLSurfaceView的onSurfaceCreated函数中移动数据加载。因此,在初始化内容视图后加载数据。
答案 0 :(得分:1)
尝试使用AsyncTask
并在doInBackground()
方法上加载数据。
使用AsyncTask
时请参阅this。
答案 1 :(得分:1)
如果您正在进行网络通话,请使用Volley或RetroFit库。另外使用Async task onPreExecute()方法显示对话框,doInBackground()做你想做的事情,onPostExecute()去掉对话框。
答案 2 :(得分:0)
使用框架布局。将图片添加到框架并隐藏xml文件中的活动框架。加载数据后,活动框架可见,图片框架可见性消失。