Mehmet Ethem SULAN :: Android :: Disable Android recreate activity on Orientation Change

Android cihazınızın ekranını çevirirken veya döndürürken activity yeniden create ediliyor. Aşağıdaki uygulamada bar yüklenirken çevirdiğimizde activity recreate edildiğinden yarıda kalıyor ilerleme. Yani dolmuyor. Dolması için tekrar buttona basmamız gerekiyor.



OrientationSampActivity.java

package com.orientation;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class OrientationSampActivity extends Activity {
    private ProgressBar progressBar1;
    private Button button_bar;
    private Handler handler;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        handler=new Handler();
        progressBar1=(ProgressBar) findViewById(R.id.progressBar1);
        button_bar=(Button) findViewById(R.id.button1_bar);
        progressBar1.setProgress(0);
//Cihazinizi cevirdiginizde(oriantasyon degistiginde) activity yeniden baslatiyor
//ve bar daha once kalinan yerde kaliyor. Yani barin tamamen dolmasş icin buttona tekrar tiklamaniz lazim.
        button_bar.setOnClickListener(new Button.OnClickListener() {
			@Override
			public void onClick(View v) {
				handler.post(runaRunnable);
			}
		});
    }
    
    Runnable runaRunnable=new Runnable() {
		
		@Override
		public void run() {
			progressBar1.setProgress(progressBar1.getProgress()+1);
			
			if(progressBar1.getProgress()<100)
			{
				handler.postDelayed(runaRunnable, 100);
			}else{
				handler.removeCallbacks(runaRunnable);
			}
			
		}
	};
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <ProgressBar 
    android:layout_height="wrap_content" 
    android:id="@+id/progressBar1" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="match_parent" 
    android:layout_marginTop="30px">
    </ProgressBar>
    <LinearLayout 
    android:layout_width="match_parent" 
    android:id="@+id/linearLayout1" 
    android:orientation="vertical" 
    android:layout_height="30dip">
    </LinearLayout>
    <Button 
    android:id="@+id/button1_bar" 
    android:layout_width="match_parent" 
    android:text="Start Bar" 
    android:layout_height="wrap_content">
    </Button>
</LinearLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.orientation"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".OrientationSampActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Bu örneği indirip çalıştırınız ve progessbar yarıdayken cihazınızı döndürün: Download OrientationSamp

Sonra aşağıdaki kodu activitye ekleyin ve çalıştırıp tekrar dönderdiğinizde activityniz yeniden create edilmiyor.

android:configChanges="orientation|keyboardHidden"

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.orientation"
      android:versionCode="1"
      android:versionName="1.0">


    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".OrientationSampActivity"
                  android:label="@string/app_name"
                  android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

Comments

There is one comment for this post.

  1. zeybek91 on Mayıs 31, 2013 8:39 pm

    Handler() sınıfının kullanım alanları ve metotları hakkında bilgi verebilirmisiniz?

Write a Comment

Let me know what you think?