如何在不替换第一个图像的情况下使用 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();
运行 您的代码并确认它是否适合您。如果您需要澄清,请随时询问 :)
我是 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 和 pickchamp2Intent 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();
运行 您的代码并确认它是否适合您。如果您需要澄清,请随时询问 :)