Android 动态布局仅在 oncreate 方法完成后显示

标签 android sqlite android-layout

   isAnswered=0;
 @Override
        protected void onCreate(Bundle savedInstanceState) {
            Log.d(TAG,"1isanswered : "+isAnswered);
            Log.d(TAG, "matchinggame OnCreate");
            super.onCreate(savedInstanceState);
            dbHandler = new DatabaseHandler(this);
            rLayout = new RelativeLayout(this);
            object = new ObjectObject();
            imageAnswer=new ImageView(this);
            setContentView(rLayout);


            trainingID = getIntent().getExtras().getInt("trainingid");
            trainingObjectList = new ArrayList<TrainingObject>();

            trainingObjectList = dbHandler.getAllTrainingObject(trainingID);
    //// TODO: 02.05.2016 egitim kismi oalcak burda tek tek gosterilecek

            rLayout.setBackgroundColor(Color.MAGENTA);





           // Handler handler = new Handler(); Log.d(TAG,"2isanswered : "+isAnswered);
            for(int i=0;i<2;i++){Log.d(TAG,"i:"+i); Log.d(TAG,"3tisanswered : "+isAnswered);
                final int finalI = i;


                //  handler.postDelayed(new Runnable() {

                  //  @Override
               //     public void run() {Log.d(TAG,"thread i: "+finalI);
                        Log.d(TAG,"4isanswered : "+isAnswered);
                 isAnswered = 0;
                TrainingObject trainingObject = new TrainingObject();
                trainingObject = trainingObjectList.get(finalI);
                objectCount = 2;
    //test icin
                Log.d(TAG,"testicin trainingobjectid: "+trainingObject.getTrainingobjectID());
                object = dbHandler.getObjectObject(trainingObject.getTrainingobjectAnswer());

                if(trainingObject.getTrainingobjectThree()!=0) objectCount++;
                if(trainingObject.getTrainingobjectFour()!=0) objectCount++;
                if(trainingObject.getTrainingobjectFive()!=0) objectCount++;
                Log.d(TAG,"matchinggame objcount: "+objectCount);

                RelativeLayout.LayoutParams rLayParams = new RelativeLayout.LayoutParams(140,140);

                rLayParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
                rLayParams.addRule(RelativeLayout.CENTER_IN_PARENT);

                 imgBytes = object.getObjectImageBlob();
                 bmp = BitmapFactory.decodeByteArray(imgBytes, 0, imgBytes.length);

                imageAnswer.setImageBitmap(bmp);
                imageAnswer.setTag(trainingObject.getTrainingobjectAnswer());
                imageAnswer.setId(R.id.imgAnswer);
                rLayout.removeAllViews();
                rLayout.addView(imageAnswer,rLayParams);




                        imageOne.setOnDragListener(MatchingGame.this);


                imageAnswer.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) { Log.d(TAG,"6isanswered : "+isAnswered);
                        Log.d(TAG,"matchinggame setontouch");
                        if (event.getAction() == MotionEvent.ACTION_DOWN) {
                            Log.d(TAG,"matchinggame setontouch if yes");
                            ClipData data = ClipData.newPlainText("", "");
                            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                            v.startDrag(data, shadowBuilder, v, 0);
                            v.setVisibility(View.INVISIBLE); Log.d(TAG,"7isanswered : "+isAnswered);
                            return true;
                        } else { Log.d(TAG,"8isanswered : "+isAnswered);
                            return false;
                        }
                    }
                });

                imageAnswer.setOnDragListener(MatchingGame.this);
                Log.d(TAG,"*");
                while(isAnswered==0){
                    //Log.d(TAG,"*");
                }

                //  }
              //  }, 30000*finalI );Log.d(TAG,"thread sonrasi: "+finalI); Log.d(TAG,"5isanswered : "+isAnswered);
            }Log.d(TAG,"ff");
        }

因为isanswered=0,所以一直在死循环。但是我看不到我的布局,在这个循环继续时我只看到洋红色。几秒钟后出现黑屏。

但是当我在那里禁用时,在打印 ff 到日志后,它完成 oncreate,然后布局更改。

我搜索过但没有答案。

Android layout only showing after oncreate method finishes

这里说试试onstart。是的,我试过了,但还是一样。

我这里只有 asynctask 调用来从 sqlite 获取值。

我有一个 for 循环,在每次迭代中,我将显示图像,用户将尝试匹配它们。

我没有使用 View 或 fragment 。

为什么它不在查看后立即发布到屏幕?

完整 Activity 在这里:

https://gist.github.com/anonymous/87ccd4147ae0d202244bb78f51844f29

最佳答案

发生这种情况是因为在 onCreate 方法完成之前未显示 Activity 。尝试将您的代码移动到 onResume 并查看它是否有效。此外,在您当前的代码中,不要忘记调用 super.onCreate(savedInstanceState)

关于Android 动态布局仅在 oncreate 方法完成后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37245003/

相关文章:

sqlite - 获取 SQLite 中最新时间戳的记录

android - 像android中的卡片一样布局

java - Android 使用带有空格的键访问 Firebase

java - 无法解析符号

python - 将数据帧附加到 sqlite3 表,BLOB 而不是时间戳

android - 如何在 android 上将 WHERE 子句添加到查询

java - ListView 共享元素转换问题

android - 我们可以在 Databinding 的 xml 布局中获取 Root View 吗?

java - "Floating"可滚动容器内 View

android - 一个ScrollBar下的ListView和LineraLayout