Android 从我的第一个活动到第二个活动检索并显示我选择的ImageView

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

我是Android开发的新手,我在一点上有点犹豫。 我已经完成了Android教程,一切正常,但我想在我的第二个
活动中显示当前选择的
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]时效率会更高在意图中。我的问题用这个方法解决了,非常感谢,现在没事了;)你好,马特,谢谢你的回复,是的,我知道这是一种黑客行为。。但正如我所说,我对安卓系统的开发还不熟悉。。现在我的申请很好,一切都很好。非常感谢你