2015-11-12 21 views
0

爲什麼圖像可以傳遞到之前的活動但不意圖用於新的活動?爲什麼圖像可以返回到之前的活動,但不打算用於新的活動

ImageFitScreen.java

b = (ImageView) findViewById(R.id.imageView3); 
     public void selectImage() { 

      final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" }; 
      AlertDialog.Builder builder = new AlertDialog.Builder(ImageFitScreen.this); 
      builder.setTitle("Add Photo!"); 
      builder.setItems(options, new DialogInterface.OnClickListener() { 

       @Override 

       public void onClick(DialogInterface dialog, int item) { 

        if (options[item].equals("Take Photo")) 

        { 

         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

         File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); 


         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
         //pic = f; 
         // Toast.makeText(getApplicationContext(), Uri.fromFile(f) +"", Toast.LENGTH_LONG).show(); 
         startActivityForResult(intent, 1); 


        } else if (options[item].equals("Choose from Gallery")) 

        { 

         Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

         startActivityForResult(intent, 2); 


        } else if (options[item].equals("Cancel")) { 

         dialog.dismiss(); 
         finish(); 

        } 

       } 

      }); 
     @Override 

     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      super.onActivityResult(requestCode, resultCode, data); 

      if (resultCode == RESULT_OK) { 
       if (requestCode == 1) { 
        //h=0; 
        File f = new File(Environment.getExternalStorageDirectory().toString()); 
        for (File temp : f.listFiles()) { 
         if (temp.getName().equals("temp.jpg")) { 
          f = temp; 
          File photo = new File(Environment.getExternalStorageDirectory(), "temp.jpg"); 
          //pic = photo; 
          break; 
         } 
        } 

        try { 
         Bitmap bitmap; 
         BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
         bitmapOptions.inJustDecodeBounds = false; 
         bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
         bitmapOptions.inDither = true; 
         bitmapOptions.inSampleSize=8; 
         bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); 
         Global.img = bitmap; 

         b.setImageBitmap(bitmap); 
         String path = android.os.Environment.getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default"; 
         //p = path; 
         f.delete(); 
         OutputStream outFile = null; 
         File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); 
         try { 

          outFile = new FileOutputStream(file); 
          bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); 
          //pic=file; 
          outFile.flush(); 
          outFile.close(); 


         } catch (FileNotFoundException e) { 
          e.printStackTrace(); 

         } catch (IOException e) { 
          e.printStackTrace(); 

         } catch (Exception e) { 
          e.printStackTrace(); 
         } 

        } catch (Exception e) { 
         e.printStackTrace(); 

        } 

       } else if (requestCode == 2) { 

        Uri selectedImage = data.getData(); 
        // h=1; 
        //imgui = selectedImage; 
        String[] filePath = {MediaStore.Images.Media.DATA}; 
        Cursor c = getContentResolver().query(selectedImage, filePath, null, null, null); 
        c.moveToFirst(); 
        int columnIndex = c.getColumnIndex(filePath[0]); 
        String picturePath = c.getString(columnIndex); 
        c.close(); 
        Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); 
        Log.w("path of image ******", picturePath + ""); 
        b.setImageBitmap(thumbnail); 
       } 


      } 
      else 
      { 
       finish(); 
      } 


     } 

ok.setOnClickListener(new View.OnClickListener() //back to Project1.java 
     { 
      public void onClick(View arg0) 
      { 
       Intent returnIntent=new Intent(); 
       text=t.getText().toString(); 
       b.setDrawingCacheEnabled(true); 
       b.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
         View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
       b.layout(0, 0, b.getMeasuredWidth(), b.getMeasuredHeight()); 
       b.buildDrawingCache(true); 
       returnIntent.putExtra("text", text); 
       if (b.getDrawingCache() != null) { 
        Bitmap bitmap = Bitmap.createBitmap(b.getDrawingCache()); 
        if (bitmap == null) { 
         Log.e("TAG", "getDrawingCache() == null"); 
        } 
        Global.img = bitmap; 
       } 
       setResult(Activity.RESULT_OK, returnIntent); 
       finish(); 
      } 
     }); 

Project1.java

public void onActivityResult(int requestCode,int resultCode, Intent data) 
     { 
      if(requestCode==PROJECT_REQUEST_CODE) { 
       if(data!=null&&data.hasExtra("text")) { 
        c = data.getStringExtra("text"); 
        txt1.setText(c); 
        viewImage.setImageBitmap(Global.img); //image can be returned 
       } 


      } 
      else if (requestCode==CAMERA_REQUEST_CODE) 
      { 

      } 
     } 

    b.setOnClickListener(new View.OnClickListener() { // back to Claims.java 
      public void onClick(View arg0) { 
       Intent returnIntent = new Intent(); 
       a = "Project"; 
       text = txt.getText().toString(); // amount 
       returnIntent.putExtra("text", text); 
       returnIntent.putExtra("a", a); 
       final int k1 = getIntent().getExtras().getInt("k"); 
       returnIntent.putExtra("k1", k1); 
       returnIntent.putExtra("c",c); 
       setResult(Activity.RESULT_OK, returnIntent); 
       finish(); 
      } 
     }); 

Claims.java

 @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
        switch (requestCode) { 
        case 0: 
         result = data.getStringExtra("text"); 
         name = data.getStringExtra("a"); 
         description=data.getStringExtra("c"); 
         if (Global.img != null) { 
          v.setImageBitmap(Global.img); //image can shown here 
         } 

         c.setText("   " + name + "------" + "RM " + result); 
         break; 
} 
} 

c.setOnClickListener(new View.OnClickListener() { //pass image to EditClaims.java 
           @Override 
           public void onClick(View v) { 
            if ((name != null && name.trim().length() > 0) && (result != null && result.trim().length() > 0)) { 
             Toast.makeText(getActivity().getApplicationContext(), "not null", Toast.LENGTH_LONG).show(); 
             Global.img=null; 
             Intent intent = new Intent(getActivity(), EditClaims.class); 
             v.setDrawingCacheEnabled(true); 
             v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
               View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
             v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 
             v.buildDrawingCache(true); 
             intent.putExtra("name", name); 
             intent.putExtra("result", result); 
             intent.putExtra("description", description); 
             if (v.getDrawingCache() != null) { 
              Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache()); 
              if (bitmap == null) { 
               Log.e("TAG", "getDrawingCache() == null"); 
              } 
              Global.img = bitmap; 
              startActivity(intent); 
             } 

             } 
            else { 
             Toast.makeText(getActivity().getApplicationContext(), "null", Toast.LENGTH_LONG).show(); 
            } 
           } 
            }); 

EditClaims.java

viewImage.setImageBitmap(Global.img); 

Global.java

public class Global { 

    static Bitmap img; 
} 

但我得到viewImage是(" " + name + "------" + "RM " + result)是從c.setText得到。有人能幫我弄清楚這個問題嗎?

活動流程:ImageFitScreen ----->回到project1 ----->回到Claims ----->Claims意圖EditClaims

權利要求的屏幕快照

請注意,金額旁邊的圖像將從Project1返回。由於c.setText不爲空,它可能意圖EditClaims.java

enter image description here

它就像魅力,但僅限於captured image

enter image description here

現在,我嘗試用image from gallery

enter image description here

當我點擊C,它讓我看到這一點。它沒有意圖EditClaims.java

enter image description here

+0

你是什麼意思的「但我在viewImage得到的是...」?一個ImageView不會顯示那樣的文字,那麼你究竟是什麼意思? –

+0

@MikeM。假設在我的'c.setText'中,我有'hello'。 S這個'hello'顯示在'viewImage'上。 – Hoo

+1

Nevermind。我想到了。我發佈了一個答案。 –

回答

1

的問題是與OnClickListener你在c設置。該聽衆有一個方法public void onClick(View v),其中你混淆了v變量。

onActivityResult()方法判斷,你有一個類成員ImageView名爲v。但是,在onClick()方法中,不合格的v將是傳遞給方法的View v,而不是類成員vView v傳遞到onClick()方法OnClickListener是被點擊的View,所以這解釋了爲什麼您在接下來的Activity中看到c的內容。

最簡單的解決方案是將onClick()方法的參數變量更改爲不同的名稱。例如:

public void onClick(View view) 
+0

感謝您的回答!請看我編輯過的文章.. – Hoo

+0

看起來像'ImageView'正在調整大小和移動,因爲你的'v.measure()'和'v.layout()'調用。不知道爲什麼下一個活動不開放。是'startActivity(intent);'被調用? –

+0

代碼實際上是一樣的。不知道爲什麼它只適用於'捕獲的圖像' – Hoo