简体   繁体   中英

ImageView background not displaying image after orientation change

Edit: If anbody wants an answer when onConfigurationChanged is called I just intialize all the variables I did in onCreate

Hello I have an application the displays a progress dialog and then displays an image in an imageview that has been taken from the camera. The problem is when I take the picture in landscape, and then wait for the dialog to finish nothing shows up in any of the imageview, and none of the buttons work. It used to crash when the dialog was about to be displayed, but I fixed that. Here is some of my code:

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();
        }



    }
}

Now I really don't know what to do. I think the problem might have something to do with the orientation change. Any help is appreciated!

Try using AsyncTask instead of your custom thread. As some of the things are suppose to work on UI thread and rest on background thread and AsyncTask make that easy. Also debugging thread code just by looking at it is difficult as well as un-reliable.

http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html http://developer.android.com/reference/android/os/AsyncTask.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM