2015-04-04 37 views
-1

基本上我正在开发一个游戏,并希望创建一个对话框,当用户点击/触摸两个文本(MFX和SFX卷)。我不知道它是否可以与Andengine一起制作,但无论如何,我尝试了解Google Alert for Alert Dialog,SeekBar等开发人员指南后尝试制作它。Android(w Andengine),创建一个对话框。从Seek Bar获取用户数据。保存到共享首选项


早些时候,我面临着一个问题:

E/AndroidRuntime(1878): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

这就是为什么我看完了更新线程,但没有运气跑,他错误仍然persits。我在android的这方面工作的经验非常少。对不起,如果它太简单了。


private void createDialog(final int pid) { 
    rM.engine.runOnUpdateThread(new Runnable() { 

     @Override 
     public void run() { 
      AlertDialog.Builder builder = new AlertDialog.Builder(activity); 
      SeekBar sb = new SeekBar(activity); 
      final SharedPreferences volumePref = activity.getSharedPreferences(pid + "", Context.MODE_PRIVATE); 
      final SharedPreferences.Editor editor = volumePref.edit(); 
      sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { 
       int volume = volumePref.getInt(pid + "", 100);// concatenation for conversion of int to string, a short method i like 

       @Override 
       public void onStopTrackingTouch(SeekBar arg0) { 
        switch (pid) { 
         case MENU_MFX://These are id's which denote which volume we want to change 
         case MENU_SFX: 
          editor.putFloat(pid + "", volume); 
          editor.commit(); 
          break; 
        } 
       } 

       @Override 
       public void onStartTrackingTouch(SeekBar arg0) { 
       } 

       @Override 
       public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) { 
        volume = arg1; 
       } 
      }); 
      builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        rM.setMfxVolume(volumePref.getFloat(MENU_MFX + "", 1f));//These methods change volume, these work fine. 
        rM.setSfxVolume(volumePref.getFloat(MENU_SFX + "", 1f)); 
       } 
      }); 
      builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
       } 
      }); 
      AlertDialog dialog = builder.create(); 
     } 
    }); 


} 

回答

0

据了解,有时更新线程运行产生问题。所以应该这样做:

this.runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     MyActivity.this.showDialog(MY_DIALOG_ID); 
    } 
}); 

正如@Nicolas Here所述。