2013-01-18 45 views
1

我是Android開發人員的新手,我在某一點上阻塞。 我已經執行了一個Android教程,一切都很好,但是我想在我的第二個Activity上顯示當前選中的ImageView檢索並顯示我選擇的ImageView從我的第一個活動到我的第二個活動

這是我第一次Activityhotel.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; 
     } 

    } 

} 

和我的第二個Activityhoteldisplay.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,但是從索引中的第一,我會就像選擇好的圖像一樣。

+0

即使您在用戶按下下一個/上一個按鈕時增加/減少'image_index',您只會創建一次'byte [] b'陣列,因此它只會包含第一個圖像。如果你通過'Intent'中的'mImageIds [image_index]'來啓動'hoteldisplay'並用它來填充'Activity'中的'ImageView',那麼效率會更高。 – Squonk

+0

您好Matt,首先感謝您的回答,正如您所說的,當我在意圖中傳遞mImageIds [image_index]時,效率會更高。我的問題是用這種方法解決,非常感謝你,現在很好;) –

回答

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對象。

+0

你好馬特,謝謝你的回覆,是的,我明白它的一種破解..但正如我說我是新的Android開發..現在我的應用程序很好,一切都很好。非常感謝你 –

相關問題