Android 从我的第一个活动到第二个活动检索并显示我选择的ImageView
我是Android开发的新手,我在一点上有点犹豫。 我已经完成了Android教程,一切正常,但我想在我的第二个Android 从我的第一个活动到第二个活动检索并显示我选择的ImageView,android,android-intent,imageview,Android,Android Intent,Imageview,我是Android开发的新手,我在一点上有点犹豫。 我已经完成了Android教程,一切正常,但我想在我的第二个活动中显示当前选择的ImageView 这是我的第一次活动hotel.java: public class hotel extends Activity implements View.OnClickListener { final String EXTRA_LOGIN = "user_login"; final String EXTRA_PASSWORD = "use
活动中显示当前选择的ImageView
这是我的第一次活动
hotel.java
:
public class hotel extends Activity implements View.OnClickListener
{
final String EXTRA_LOGIN = "user_login";
final String EXTRA_PASSWORD = "user_password";
Button button;
int image_index = 0;
private static final int MAX_IMAGE_COUNT=8;
private Integer[]mImageIds ={
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hotel);
ImageView imgView = (ImageView) findViewById(R.id.pictogramme);
imgView.setImageResource(mImageIds[image_index]);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inScaled = false;
opt.inSampleSize = 1;
opt.inDither = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),mImageIds[image_index] ,opt);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
final byte[]b = baos.toByteArray();
final EditText login = (EditText)findViewById(R.id.user_email);
final EditText pass = (EditText)findViewById(R.id.user_password);
final Button loginButton = (Button) findViewById(R.id.connect);
loginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(hotel.this, hoteldisplay.class);
intent.putExtra("picture", b);
intent.putExtra(EXTRA_LOGIN, login.getText().toString());
intent.putExtra(EXTRA_PASSWORD,pass.getText().toString());
startActivity(intent);
}
});
Intent intent = getIntent();
Button next = (Button)findViewById(R.id.button_next);
next.setOnClickListener(this);
Button previous = (Button)findViewById(R.id.button_previous);
previous.setOnClickListener(this);
showImage();
}
private void showImage() {
ImageView imgView = (ImageView) findViewById(R.id.pictogramme);
imgView.setImageResource(mImageIds[image_index]);
}
@Override
public void onClick(View v)
{
switch(v.getId())
{
case (R.id.button_previous):
image_index--;
if (image_index == -1){
image_index = MAX_IMAGE_COUNT -1;
}
showImage();
break;
case (R.id.button_next):
image_index++;
if (image_index == MAX_IMAGE_COUNT){
image_index = 0;
}
showImage();
break;
}
}
}
public class hoteldisplay extends Activity {
final String EXTRA_LOGIN = "user_login";
final String EXTRA_PASSWORD = "user_password";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_display);
Intent intent = getIntent();
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView image = (ImageView) findViewById(R.id.image_display);
TextView loginDisplay = (TextView) findViewById(R.id.email_display);
TextView passwordDisplay = (TextView) findViewById(R.id.password_display);
if (intent != null) {
loginDisplay.setText(intent.getStringExtra(EXTRA_LOGIN));
passwordDisplay.setText(intent.getStringExtra(EXTRA_PASSWORD));
image.setImageBitmap(bmp);
}
}
}
还有我的第二个活动
hoteldisplay.java
:
public class hotel extends Activity implements View.OnClickListener
{
final String EXTRA_LOGIN = "user_login";
final String EXTRA_PASSWORD = "user_password";
Button button;
int image_index = 0;
private static final int MAX_IMAGE_COUNT=8;
private Integer[]mImageIds ={
R.drawable.image1,
R.drawable.image2,
R.drawable.image3,
R.drawable.image4,
R.drawable.image5,
R.drawable.image6,
R.drawable.image7,
R.drawable.image8,
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hotel);
ImageView imgView = (ImageView) findViewById(R.id.pictogramme);
imgView.setImageResource(mImageIds[image_index]);
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inScaled = false;
opt.inSampleSize = 1;
opt.inDither = true;
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),mImageIds[image_index] ,opt);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
final byte[]b = baos.toByteArray();
final EditText login = (EditText)findViewById(R.id.user_email);
final EditText pass = (EditText)findViewById(R.id.user_password);
final Button loginButton = (Button) findViewById(R.id.connect);
loginButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(hotel.this, hoteldisplay.class);
intent.putExtra("picture", b);
intent.putExtra(EXTRA_LOGIN, login.getText().toString());
intent.putExtra(EXTRA_PASSWORD,pass.getText().toString());
startActivity(intent);
}
});
Intent intent = getIntent();
Button next = (Button)findViewById(R.id.button_next);
next.setOnClickListener(this);
Button previous = (Button)findViewById(R.id.button_previous);
previous.setOnClickListener(this);
showImage();
}
private void showImage() {
ImageView imgView = (ImageView) findViewById(R.id.pictogramme);
imgView.setImageResource(mImageIds[image_index]);
}
@Override
public void onClick(View v)
{
switch(v.getId())
{
case (R.id.button_previous):
image_index--;
if (image_index == -1){
image_index = MAX_IMAGE_COUNT -1;
}
showImage();
break;
case (R.id.button_next):
image_index++;
if (image_index == MAX_IMAGE_COUNT){
image_index = 0;
}
showImage();
break;
}
}
}
public class hoteldisplay extends Activity {
final String EXTRA_LOGIN = "user_login";
final String EXTRA_PASSWORD = "user_password";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_display);
Intent intent = getIntent();
Bundle extras = getIntent().getExtras();
byte[] b = extras.getByteArray("picture");
Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length);
ImageView image = (ImageView) findViewById(R.id.image_display);
TextView loginDisplay = (TextView) findViewById(R.id.email_display);
TextView passwordDisplay = (TextView) findViewById(R.id.password_display);
if (intent != null) {
loginDisplay.setText(intent.getStringExtra(EXTRA_LOGIN));
passwordDisplay.setText(intent.getStringExtra(EXTRA_PASSWORD));
image.setImageBitmap(bmp);
}
}
}
目前,我正确地检索了我的ImageView
,但它是索引中的第一个,我希望选择好的图像。通过意图传递二进制对象有点像黑客。传递对象有一种更简单(虽然也很粗略)的方法,即使用应用程序
类的实例来保存全局变量
您不必手动创建Globals
的实例。它将在您的第一个活动开始时自动创建
例如:
/* Globals.java */
public class Globals extends Application {
ImageView img;
}
/* Hotel.java */
public class Hotel extends Activity {
public void storeImageView() {
Globals globals = (Globals) getApplicationContext();
globals.img = myImgView; // save a ptr to your ImageView
myImgView = null // **see note below
}
}
/* HotelViewer.java */
public class HotelViewer extends Activity {
public void retrieveImageView() {
Globals globals = (Globals) getApplicationContext();
ImageView image = globals.img; // retrieve ImageView
}
}
**注意:如果您想让垃圾收集器清理您的酒店
活动,您不能有指向全局
对象的活动指针。即使在用户按下下一个/上一个按钮时增加/减少图像索引
,您也只能创建字节[]b
数组一次,因此它将只包含第一个图像。如果您在用于启动hoteldisplay
的Intent
中传递mImageIds[image\u index]
,并使用它填充ImageView
中的ImageView
,效率会更高。您好,马特,首先感谢您的回答,正如您所说,在传递mImageIds[image\u index]时效率会更高在意图中。我的问题用这个方法解决了,非常感谢,现在没事了;)你好,马特,谢谢你的回复,是的,我知道这是一种黑客行为。。但正如我所说,我对安卓系统的开发还不熟悉。。现在我的申请很好,一切都很好。非常感谢你