Фон ImageView не отображает изображение после изменения ориентации - PullRequest
0 голосов
/ 17 декабря 2011

Редактировать: Если кто-то хочет получить ответ, когда вызывается onConfigurationChanged, я просто инициализирую все переменные, которые я сделал в onCreate

Здравствуйте, у меня есть приложение, которое отображает диалоговое окно хода выполнения, а затем отображает изображение в виде изображения, которое было снято с камеры. Проблема в том, что когда я делаю снимок в альбомной ориентации, а затем жду, пока диалоговое окно не завершится, ничего не отображается ни в одном из изображений, и ни одна из кнопок не работает. Раньше он падал, когда собирался отобразить диалог, но я исправил это. Вот часть моего кода:

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



    }
}

Теперь я действительно не знаю, что делать. Я думаю, что проблема может быть связана с изменением ориентации. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 17 декабря 2011

Попробуйте использовать AsyncTask вместо своей пользовательской темы. Предполагается, что некоторые вещи работают в потоке пользовательского интерфейса и опираются на фоновый поток, и AsyncTask делает это легко. Также отладка кода потока, просто смотря на него, сложна и ненадежна.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...