2016-05-16 14 views
1
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なので、無限ループにとどまるためです。しかし私は私のレイアウトを見ることができない、私はこのループが続く間、私はマゼンタを参照してください。秒後に黒い画面が表示されます。Android動的レイアウトは、oncreateメソッドの終了後にのみ表示されます。

しかし、そこにいる間、私はffをログに記録した後、oncreateを終了してレイアウトを変更します。

私はこれを検索しましたが、答えはありませんでした。ここ

Android layout only showing after oncreate method finishes

それはONSTARTしてみてくださいと言います。はい、私は同じことを試みました。

ここでは、syniteから値を取得するためのasynctaskコールしかありません。

私はforループを持っています、各反復で、私は画像を表示し、ユーザーはそれらを試してみます。

私はビューやフラグメントを使用しませんでした。

なぜそれは表示されるとすぐに画面に投稿されませんか?

フル活動はここにある:

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

答えて

1

onCreate方法が終了する前にアクティビティが表示されていないので、これが起こります。コードをonResumeに移動し、それが機能するかどうか確認してください。また、現在のコードでは、電話を忘れないでくださいsuper.onCreate(savedInstanceState)

+0

同じことです:forループの後にコードを取るonresumeしかし、うまくいきませんでした –

+0

ので、私はこれを行うにはどうすればよいですか?なぜなら私はforループで5回の反復があり、各反復には異なるレイアウトがあるからです。 –

+0

'AsyncTask'を使用してレイアウトを更新することをお勧めしますonPostExecuted' http://developer.android.com/intl/es /reference/android/os/AsyncTask.html –

関連する問題