2012-11-08 38 views
0

我有一個TabHost,並在那4個不同的活動。在第一個選項卡中,我可以選擇從圖庫中選擇圖像或從相機拍攝照片。現在,我用public void onActivityResult(int requestCode,int resultcode,Intent intent)方法..但是,它沒有在TabHost中調用。沒有tabHost它是完美的工作...如何解決這個..這裏是我的代碼..Please檢查我的整個code..Thanks提前..在TabHost onActivityResult不起作用

tblTreePhoto.setOnClickListener(new OnClickListener() 
     { 

      @Override 
      public void onClick(View arg0) 
      { 
       final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getParent()); 
       alertDialog.setTitle("Select Photo"); 
       alertDialog.setPositiveButton("Take Photo", new DialogInterface.OnClickListener() 
       { 

        @Override 
        public void onClick(DialogInterface arg0, int arg1) 
        { 
         if(Tree_Image.count<3) 
         { 
          Intent i1 = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
          File out = Environment.getExternalStorageDirectory(); 
          out = new File(out, "newImage.jpg"); 
          i1.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out)); 
          getParent().startActivityForResult(i1, 10); 
         } 
         else 
         { 
          Toast.makeText(getApplicationContext(), "You can not add more than 2 photos" , 1).show(); 
         } 
        } 

       }); 

       alertDialog.setNeutralButton("Gallery", new DialogInterface.OnClickListener() 
       { 

        @Override 
        public void onClick(DialogInterface dialog, int which) 
        { 
         if(Tree_Image.count<3) 
         { 
          Intent intent = new Intent(); 
          intent.setType("image/*"); 
          intent.setAction(Intent.ACTION_GET_CONTENT); 
          getParent().startActivityForResult(Intent.createChooser(intent,"Select Picture"),1); 
         } 
         else 
         { 
          Toast.makeText(getApplicationContext(), "You can not add more than 2 photos" , 1).show(); 

         } 
        } 
       }); 
       alertDialog.setNegativeButton("View Selected Photos", new DialogInterface.OnClickListener() 
       { 

        @Override 
        public void onClick(DialogInterface arg0, int arg1) 
        { 
         Intent i = new Intent(getParent(),Show_Selected_Images.class); 
         //i.putExtra("cqname", client_name.getText().toString()); 
         startActivity(i); 
        } 

       }); 

       alertDialog.show(); 

      } 
     }); 

,這是我的onActivityResult方法: -

protected void onActivityResult(int requestCode, int resultcode, Intent intent) 
    { 
     int orientation =0; 
     Log.d("result ","code uis"+resultcode); 

     super.onActivityResult(requestCode, resultcode, intent); 

     if (requestCode == 1) 
     { 
      if (intent != null && resultcode == RESULT_OK) 
      {    

       Uri selectedImage = intent.getData(); 

        String[] filePathColumn = {MediaStore.Images.Media.DATA}; 
        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        cursor.moveToFirst(); 
        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        String filePath = cursor.getString(columnIndex); 
        Log.v("log","filePath is : "+filePath); 

        cursor.close(); 
        try 
        { 
         ExifInterface exif = new ExifInterface(filePath); 
         orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 
         //Toast.makeText(getApplicationContext(), ""+orientation, 1).show(); 
         Log.v("log", "ort is "+orientation); 

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

        if(bmp != null && !bmp.isRecycled()) 
        { 
         bmp = null;    
        } 

        File f = new File(filePath); 
        bmp = decodeFile(f,400,400); 

        if (orientation==6) 
        { 
         Matrix matrix = new Matrix(); 
         matrix.postRotate(90); 
         bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); 
        } 
        else if (orientation==8) 
        { 
         Matrix matrix = new Matrix(); 
         matrix.postRotate(270); 
         bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); 
        } 

        else if (orientation==3) 
        { 
         Matrix matrix = new Matrix(); 
         matrix.postRotate(180); 
         bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true); 
        } 

        Log.v("log", "before width is "+bmp.getWidth() + " and height is "+bmp.getHeight()); 

        bt=Bitmap.createScaledBitmap(bmp,320, 300, false); 
        // Bitmap bt_thumb = Bitmap.createScaledBitmap(bmp, 70, 70, false); 




        Intent i = new Intent(Tree_Assessmnt_Tree.this,Tree_Image.class); 
        i.putExtra("userid", uid); 
        // TabGroupActivity parentActivity = (TabGroupActivity) getParent(); 
        startActivity(i); 

      } 
      else 
      { 
       Log.v("log", "Photopicker canceled");   
      } 
     } 
     else if (requestCode == 10) 
     { 

      File out = new File(Environment.getExternalStorageDirectory(), "newImage.jpg"); 

      if(!out.exists()) 
      { 
       Log.v("log", "file not found"); 
       Toast.makeText(getBaseContext(),"Error while capturing image", Toast.LENGTH_LONG).show(); 

       return; 

      } 

      Log.v("log", "file "+out.getAbsolutePath()); 
      File f = new File(out.getAbsolutePath()); 

      try 
      { 

       ExifInterface exif = new ExifInterface(out.getAbsolutePath()); 
       orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1); 
       //Toast.makeText(getApplicationContext(), ""+orientation, 1).show(); 
       Log.v("log", "ort is "+orientation); 

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

      Bitmap photo =decodeFile(f,400,400); 
      if (orientation==6) 
      { 
        Matrix matrix = new Matrix(); 
        matrix.postRotate(90); 
        photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
      } 
      else if (orientation==8) 
      { 
        Matrix matrix = new Matrix(); 
        matrix.postRotate(270); 
        photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
      } 

      else if (orientation==3) 
      { 
        Matrix matrix = new Matrix(); 
        matrix.postRotate(180); 
        photo = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(), photo.getHeight(), matrix, true); 
      } 



      //Bitmap photo = (Bitmap) intent.getExtras().get("data"); 
      //bt=Bitmap.createScaledBitmap(photo, 380, 520, false); 
      bt=photo; 
      // bt=Bitmap.createScaledBitmap(photo,320, 300, false); 
//   Log.v("log", "before width is "+bt.getWidth() + " and height is "+bt.getHeight()); 

       /* gamePic.setBackgroundResource(0); 
        gamePic.setImageBitmap(photo);*/ 
      //txtPhoto.setText(""+DrawOnImage_Activity.count); 


      Intent i = new Intent(Tree_Assessmnt_Tree.this,Tree_Image.class); 
      i.putExtra("userid", uid); 
      startActivity(i); 

     } 

     else if(requestCode==6) 
     { 
       if (intent == null) 
       { 
        Log.v("log", "Null data, but RESULT_OK, from image picker!"); 
         Toast t = Toast.makeText(this, "No Photo Slected",Toast.LENGTH_SHORT); 
         t.show(); 

         return; 
       } 
     } 
    } 
+0

你在哪裏設置你的onClickListener和你的onActivityResult?在你的TabHost或你的活動? –

+0

在我的Activity .. –

+0

爲什麼你使用getParent()方法?改爲使用當前活動,其中定義了onActivityResult()方法。 – Flawyte

回答

1

其他的做法是這樣的。

  1. 點擊按鈕(您想打開意圖)打開另一個活動。
  2. 在另一個活動的onCreate()打開該意圖。
  3. onActivityResult設置上一個活動並調用finish()的靜態數據。
  4. 這種方式從來沒有人知道你開了這樣的活動,你會得到你的數據。

:)

+0

Thanx爲您的答覆..它的工作...但它需要一些時間來打開畫廊比正常時間 –

0

您在getParent()

嘗試調用startActivityForResult()刪除getParent()