我只用一個按鈕就可以完成簡單的活動。當按鈕被點擊時,我正在射擊意圖從圖庫中選擇圖像。當我啓動意圖然後旋轉屏幕時會發生奇怪的事情。以下是步驟:Android - 定位更改後複製「打開」系統對話框實例
- 單擊按鈕。出現「打開」系統對話框。
- 旋轉屏幕。活動被重新創建,對話框仍然顯示。注 - 我不會再次在我的活動中重新調用startActivityForResult(Intent,int)。
- 點擊返回按鈕。 「打開」對話框消失,但下面還有一個對話框。
因此,即使我沒有調用startActivityForResult(Intent,int),對話框的新實例也會在每個方向更改中創建,並且舊實例不會被破壞。
有沒有人遇到這個問題?如何擺脫這些重複的對話框?
更新1: 所以,這裏是一些示例代碼:
public class MainActivity extends AppCompatActivity
{
private boolean mIsStarted = false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
{
mIsStarted = savedInstanceState.getBoolean("key");
}
if (!mIsStarted)
{
mIsStarted = true;
Intent intent = new Intent(Intent.ACTION_PICK).setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MimeType.IMAGE);
startActivityForResult(intent, 1);
}
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putBoolean("key", mIsStarted);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
mIsStarted = false;
}
}
我也試着設置android:configChanges="orientation|keyboardHidden|keyboard|screenSize|mcc|mnc"
,仍然每次我旋轉屏幕時,(的對話框新副本其實這不是一個對話框,這是ResolverActivity)顯示在前一個頂部。這是一些Android錯誤還是隻是我做錯了什麼?
更新2:所以我嘗試了另一種方法 - 在Activity.onStop()
裏面撥打finishActivity(int)。結果非常奇怪 - 現在我只有兩份ChooserActivity。第二個副本創建後,它開始正常旋轉。
下面是代碼:
public class MainActivity extends AppCompatActivity
{
private static final String LOG_TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState)
{
Log.d(LOG_TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.make_photo).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(Intent.ACTION_PICK).setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MimeType.IMAGE);
startActivityForResult(intent, 1);
}
});
}
@Override
protected void onStop()
{
Log.d(LOG_TAG, "onStop");
super.onStop();
finishActivity(1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Log.d(LOG_TAG, String.format("onActivityResult[requestCode:%d, resultCode:%d, data:%s]",
requestCode, resultCode, data != null ? data.toString() : "NULL"));
}
}
仍然不知道爲什麼正在創建第二個副本。
但如果我真的需要支持不同的方向? –
忽略以前的評論,這將繼續支持定位更改 - 它將不會重新創建活動。 – AndroidMechanic
即使我對不同的方向有不同的佈局? –