如何在不替换第一个图像的情况下使用 putExtra 发送第二个图像

How to send second image using putExtra without replacing the first one

我是 android 的新手,我刚刚了解 .putExtra 的工作原理。我想将来自两个不同活动的 2 个不同图像发送到两个不同的图像视图到我的 Main Activity。我尝试这样做,但每次我选择第二张图片时,第一张图片都会被我的默认图片替换。这是我的代码,我们将不胜感激

我的主Activity:

public class MainActivity extends AppCompatActivity {
TextView champ1;
TextView champ2;
private ImageView image;
private ImageView image2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //--INITIALISING IMAGEVIEW--//
    image = (ImageView)findViewById(R.id.champ1);
    image2 = (ImageView)findViewById(R.id.champ2);
    ImageView image3 = (ImageView)findViewById(R.id.vs);

    //--SETTING RESOURCES FROM ANOTHER ACTIVITY--//
    image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.random));
    image2.setImageResource(getIntent().getIntExtra("myImageResource2",R.drawable.random));
    image3.setImageResource(R.drawable.vssymbol);
    //--SETTINGS TEXT FROM ANOTHER ACTIVITY--//
    champ1=(TextView) findViewById(R.id.textview1);
    champ1.setText(getIntent().getStringExtra("message"));
    champ2=(TextView)findViewById(R.id.textview2);
    champ2.setText(getIntent().getStringExtra("message2"));


    //--PICK CHAMP BUTTONS--//
    Button champselect1 = (Button)findViewById(R.id.champselect1);
    Button champselect2 = (Button)findViewById(R.id.champselect2);

    //------------------//
    champselect1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

                Intent intent = new Intent(MainActivity.this, pickchamp.class);
                startActivity(intent);

        }
    });

    champselect2.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            Intent intent = new Intent(MainActivity.this, pickchamp2.class);
            startActivity(intent);
        }
    });
}
}

这是第一个activity,我想从中获取照片

public class pickchamp2 extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme_Dialog);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pickchamp2);
    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    //--DECLARING IMAGEBUTTONS--//
    ImageButton ab = (ImageButton)findViewById(R.id.ab);
    ImageButton av = (ImageButton)findViewById(R.id.av);
    ImageButton ac = (ImageButton)findViewById(R.id.ac);

    //--ONCLICKLISTENERS--//
    ab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
            champ2.putExtra("myImageResource2", R.drawable.ab);
            champ2.putExtra("message2", "ab");
            startActivity(champ2);
        }
    });
    av.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
            champ2.putExtra("myImageResource2", R.drawable.av);
            champ2.putExtra("message2", "av");
            startActivity(champ2);
        }
    });
    ac.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
            champ2.putExtra("myImageResource2", R.drawable.ac);
            champ2.putExtra("message2", "ac");
            startActivity(champ2);
        }
    });
}

}

这是我想要的第二张 activity select 第二张图片

package com.example.alex.matchups;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class pickchamp extends MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme_Dialog);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pickchamp);
    getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 
ViewGroup.LayoutParams.MATCH_PARENT);
    //--DECLARING IMAGEBUTTONS--//
    ImageButton ab2= (ImageButton)findViewById(R.id.ab2);
    ImageButton av2= (ImageButton)findViewById(R.id.av2);
    ImageButton ac2= (ImageButton)findViewById(R.id.ac2);


    //--ONCLICKLISTENERS--//
    ab2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent act2= new Intent(pickchamp.this,MainActivity.class);
            act2.putExtra("myImageResource", R.drawable.ab2);
            act2.putExtra("message", "ab");
            startActivity(act2);
        }
    });
    av2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent act2= new Intent(pickchamp.this,MainActivity.class);
            act2.putExtra("myImageResource", R.drawable.av2);
            act2.putExtra("message", "av2");
            startActivity(act2);
        }
    });
    ac2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent act2= new Intent(pickchamp.this,MainActivity.class);
            act2.putExtra("myImageResource", R.drawable.ac2);
            act2.putExtra("message", "ac2");
            startActivity(act2);
        }
    });
}}

非常感谢

看起来每次创建主要 activity 时,您都会为所有图像视图重置图像。

因此,当您使用 Intent 启动 activity 时,您实际上是在创建一个新对象,它与已经具有图像集的 activity 不同。当您第二次启动 main activity 时,您没有为其中一个图像视图传递参数,因此它会将其设置为您指定的默认值。

image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.random)); image2.setImageResource(getIntent().getIntExtra("myImageResource2",R.drawable.random));

因为你只在 activity 启动时传入 myImageResource 或 myImageResource2 一个或另一个将被设置为默认值,基本上是你没有传入的那个。

一个简单的解决方案是检查参数是否存在,如果存在则设置图像视图资源。

if(getIntent().hasExtra("myImageResource2")) { image2.setImageResource(getIntent().getIntExtra("myImageResource2",R.drawable.random)); } if(getIntent().hasExtra("myImageResource")) { image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.random)); }

正如史蒂文所说,你每次都在创建新的活动,这样你就无法实现你想要的。

更好的解决方案是完成 pickchamp 的活动并将图像传回 MainActivity 而不是创建另一个 MainAcitivity。

您可以使用 startActivityForResult to send your data back to MainActivity as described here 来做到这一点。

代码

使用 startActivityForResult:

启动你的 pickchamp 和 pickchamp2
Intent intent = new Intent(MainActivity.this, pickchamp.class);
startActivityForResult (intent, 1); //where 1 is the requestCode that you want to use

Intent intent = new Intent(MainActivity.this, pickchamp2.class);
startActivityForResult (intent, 2); //where 2 is the requestCode that you want to use

和add/overrideMainActivity

中的onActivityResult
 @Override  
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
       super.onActivityResult(requestCode, resultCode, data); 
       if(requestCode == 1) {  
         image.setImageResource(data.getIntExtra("myImageResource",R.drawable.random));  
       }
       else if(requestCode == 2) { 
image2.setImageResource(data.getIntExtra("myImageResource2",R.drawable.random));
           }
     }  

在 pickchamp 的活动中,您必须将 onClick 替换为类似的方法(例如 pickchamp2)

Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
champ2.putExtra("myImageResource2", R.drawable.ab);
champ2.putExtra("message2", "ab");
setResult(Activity.RESULT_OK, champ2);
finish();

你需要的,可以通过使用 onActivityResult 来完成。首先从 main Activity.

中删除下面的代码
//--SETTING RESOURCES FROM ANOTHER ACTIVITY--//
image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.random));
image2.setImageResource(getIntent().getIntExtra("myImageResource2",R.drawable.random));

现在你必须覆盖 MainActivity 的 onActivityResult 方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==100){
        if(resultCode==10){
            image.setImageResource(data.getIntExtra("myImageResource",R.drawable.random);
        }else if(resultCode==11){
            image2.setImageResource(getIntent().getIntExtra("myImageResource2",R.drawable.random));
        }
    }

现在每次您从主 activity 调用 startActivityForResult() 时触发一个 Intent,它有两个参数 Intent 和请求代码。

Intent intent = new Intent(MainActivity.this, YouTargetClassName.class);
            startActivityForResult(intent,100);

现在在您的 pickchamp Class 替换此代码

Intent act2= new Intent(pickchamp.this,MainActivity.class);
        act2.putExtra("myImageResource", R.drawable.ab2);
        act2.putExtra("message", "ab");
        startActivity(act2);

使用以下代码

Intent act2= new Intent(pickchamp.this,MainActivity.class);
            act2.putExtra("myImageResource", R.drawable.ab2);
            act2.putExtra("message", "ab");
            setResult(10,act2);
            finish();

最后在 pickchamp2 class 替换

Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
        champ2.putExtra("myImageResource2", R.drawable.av);
        champ2.putExtra("message2", "av");
        startActivity(champ2);

Intent champ2= new Intent(pickchamp2.this,MainActivity.class);
            champ2.putExtra("myImageResource2", R.drawable.av);
            champ2.putExtra("message2", "av");
            setResult(11,champ2);
            finish();

运行 您的代码并确认它是否适合您。如果您需要澄清,请随时询问 :)