[英]Scope problem - put intent extra and start activity from 2 different functions
我有2位聽眾,其中1位需要獲得額外的意圖,這是一個圖像uri,另一位需要從該目標開始其他活動。 但是我認為,由於它們處於不同的范圍,因此並未真正為啟動其他活動的意圖提供額外的費用。
這是代碼:
private Intent intent = new Intent(this, OtherActivity.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button= findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
intent = new Intent(v.getContext(), OtherActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
Thing.ActivityResult result = Thing.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
intent.putExtra("imageUri", resultUri.toString());
}
}
}
我希望我在onActivityResult
放入的額外內容將被發送到單擊按鈕時onClickListener
啟動的活動
我的建議是使用一個字段來存儲圖像URI:
1-在您的類中定義一個String變量
String imageURI = "";
2-在您的onActivityResult中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
Thing.ActivityResult result = Thing.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
imageURI = resultUri.toString();
}
}
3在您的onClickListener中:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
intent = new Intent(v.getContext(), OtherActivity.class);
intent.putExtra("imageUri", imageURI);
startActivity(intent);
}
});
在onClick
您正在重新初始化Intent,因此您可能設置的所有附加功能都將丟失。 如果刪除startActivity
上方的行,就可以了。
我不會那樣想。 我不會將Intent作為類變量,而是將圖像URI。 因此,每當發生單擊事件時,我都會檢查是否已設置圖像URI,創建新的Intent,然后啟動Activity。
您的代碼將如下所示:
private String intentImage = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (intentImage != null) {
Intent intent = new Intent(this, OtherActivity.class);
intent.putExtra("imageUri", intentImage);
startActivity(intent);
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Thing.SPECIFIC_REQUEST_CODE) {
Thing.ActivityResult result = Thing.getActivityResult(data);
if (resultCode == RESULT_OK) {
Uri resultUri = result.getUri();
intentImage = resultUri.toString();
}
}
}
還請記住,您的代碼中沒有任何startActivityForResult
。 因此,如果這是您的全部活動,則永遠不會調用onActivityResult
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.