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>

Write a Comment
Let me know what you think?