簡體   English   中英

范圍問題-放下意圖並從2個不同的功能開始活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM