1

私はAndroid開発の初心者で、ある点でブロックしています。私は Android チュートリアルを実行しましたが、すべて問題ありませんが、現在選択さImageViewれているものを 2 番目に表示したいと思いActivityます。

これは私の最初Activity 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;
        }

    } 

}

そして私の2番目Activity hoteldisplay.java

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が、これはインデックスからの最初のものであり、適切に選択された画像が必要です。

4

1 に答える 1

0

インテントを介してバイナリ オブジェクトを渡すことは、一種のハックです。オブジェクトを渡すためのより簡単な (大ざっぱですが) 方法があります。これは、Applicationクラスのインスタンスを使用して保持しGlobal Variablesます。

のインスタンスを手動で作成する必要はありません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
    }
}

Garbage Collector**注: でアクティビティをクリーンアップしたい場合、オブジェクトHotelへの生きたポインタを持つことはできませんGlobal

于 2013-01-18T18:42:34.457 に答える