编辑:如果有人想在onConfigurationChanged被调用时得到答案,我只是初始化我在onCreate
中所做的所有变量你好,我有一个应用程序显示一个进度对话框,然后在一个图像视图中显示一个图像,该图像已从相机中取出。问题是当我在横向拍摄照片时,然后等待对话框完成,在任何imageview中都没有显示任何东西,并且没有一个按钮工作。当对话框即将显示时,它曾经崩溃,但我修复了它。下面是我的一些代码:
public class AnnoyingMeterActivity extends Activity {
Random r = new Random(System.currentTimeMillis());
class ProgressThread extends Thread {
Handler mHandler;
final static int STATE_DONE = 0;
final static int STATE_RUNNING = 1;
int mState;
int total;
ProgressThread(Handler h) {
mHandler = h;
}
public void run() {
mState = STATE_RUNNING;
total = 0;
while (mState == STATE_RUNNING) {
try {
Thread.sleep(55);
} catch (InterruptedException e) {
}
Message msg = mHandler.obtainMessage();
msg.arg1 = total;
mHandler.sendMessage(msg);
total++;
}
}
/*
* sets the current state for the thread, used to stop the thread
*/
public void setState(int state) {
mState = state;
}
}
TextView tv;
ImageView iv;
TextView tv1;
static final int PROGRESS_DIALOG = 0;
ProgressThread progressThread;
ProgressDialog progressDialog;
Bitmap person;
ImageView tiv;
ImageView iv2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button scanPersonButton = (Button) findViewById(R.id.scanPerson);
scanPersonButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
scanPerson();
}
});
tv = (TextView) findViewById(R.id.tv);
iv = (ImageView) findViewById(R.id.annoyingMeterImage);
iv.setBackgroundResource(R.drawable.finalmeter);
tv1 = (TextView) findViewById(R.id.textView1);
tiv = (ImageView) findViewById(R.id.imageView1);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.main);
}
protected void scanPerson() {
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
person = (Bitmap) data.getExtras().get("data");
showDialog(PROGRESS_DIALOG);
}
}
protected void randomImageDisplayThing() {
tiv.setBackgroundDrawable(new BitmapDrawable(person));
switch (annoyingRating) {
case 0:
iv.setBackgroundResource(R.drawable.finalmeter0);
break;
case 1:
iv.setBackgroundResource(R.drawable.finalmeter1);
break;
case 2:
iv.setBackgroundResource(R.drawable.finalmeter2);
break;
case 3:
iv.setBackgroundResource(R.drawable.finalmeter3);
break;
case 4:
iv.setBackgroundResource(R.drawable.finalmeter4);
break;
case 5:
iv.setBackgroundResource(R.drawable.finalmeter5);
break;
case 6:
iv.setBackgroundResource(R.drawable.finalmeter6);
break;
case 7:
iv.setBackgroundResource(R.drawable.finalmeter7);
break;
case 8:
iv.setBackgroundResource(R.drawable.finalmeter8);
break;
case 9:
iv.setBackgroundResource(R.drawable.finalmeter9);
break;
case 10:
iv.setBackgroundResource(R.drawable.finalmeter10);
break;
case 11:
iv.setBackgroundResource(R.drawable.finalmeter11);
break;
}
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case PROGRESS_DIALOG:
progressDialog = new ProgressDialog(this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Scanning...");
return progressDialog;
default:
return null;
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.arg1;
progressDialog.setProgress(total);
if (total >= 100) {
dismissDialog(PROGRESS_DIALOG);
progressThread.setState(ProgressThread.STATE_DONE);
randomImageDisplayThing();
}
}
};
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case PROGRESS_DIALOG:
progressDialog.setProgress(0);
progressThread = new ProgressThread(handler);
progressThread.start();
}
}
}
现在我真的不知道该怎么办。我想这个问题可能和方向的改变有关。任何帮助都是感激的!
尝试使用AsyncTask
代替您的自定义线程。因为有些东西应该在UI线程上工作,而在后台线程和AsyncTask上休息,这很容易。此外,仅仅通过查看来调试线程代码是困难的,也是不可靠的。
http://developer.android.com/guide/topics/fundamentals/processes-and-threads.htmlhttp://developer.android.com/reference/android/os/AsyncTask.html