0

我正在使用 Activitygroup 概念来处理单个选项卡下的多个活动。我在选项卡的第一个活动中正在做什么,我从图库和相机中获取图像,然后当用户选择图像时,该图像应该移动到第二个活动,但是这两个活动必须保持在同一个选项卡下。这是我的代码...

TabGroupActivity.java

public class TabGroupActivity extends ActivityGroup {

    private ArrayList<String> mIdList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        if (mIdList == null) mIdList = new ArrayList<String>();
    }

  @Override
  public void finishFromChild(Activity child) {
      LocalActivityManager manager = getLocalActivityManager();
      int index = mIdList.size()-1;

      if (index < 1) {
          finish();
          return;
      }

      manager.destroyActivity(mIdList.get(index), true);
      mIdList.remove(index); index--;
      String lastId = mIdList.get(index);
      Intent lastIntent = manager.getActivity(lastId).getIntent();
      Window newWindow = manager.startActivity(lastId, lastIntent);
      setContentView(newWindow.getDecorView());
  }

  public void startChildActivity(String Id, Intent intent) {     
      Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT));
      if (window != null) {
          mIdList.add(Id);
          setContentView(window.getDecorView()); 
      }    
  }


  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR
          return true;
      }
      return super.onKeyDown(keyCode, event);
  }


  @Override
  public boolean onKeyUp(int keyCode, KeyEvent event) {
      if (keyCode == KeyEvent.KEYCODE_BACK) {
          onBackPressed();
          return true;
      }
      return super.onKeyUp(keyCode, event);
  }


  public void  onBackPressed() {
      int length = mIdList.size();
      if ( length > 1) {
          Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1));
          current.finish();
      }  
  }
}

MainActivity.java

Intent intentPics = new Intent().setClass(this, GalleryPic_First.class);
TabSpec tabPics = tabHost
  .newTabSpec("Photo")
  .setIndicator("Photo", ressources.getDrawable(R.drawable.icon_apple_config))
  .setContent(intentPics);

GalleryPic_First .java

public class GalleryPic_First extends TabGroupActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        startChildActivity("EditActivity", new Intent(this,GalleryPic.class));
    }
}

GalleryPic.java

public class GalleryPic extends Activity {

    private static final int TAKE_PICTURE = 0;
    private static final int REQUEST_ID = 1;
    private static final int HALF = 2;
    private Uri mUri;
    private Bitmap mPhoto;
    ImageView ivGallery, ivCamera;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gallery_pic);
        ivGallery = (ImageView)findViewById(R.id.gallery);
        ivCamera = (ImageView)findViewById(R.id.snap);

        ivGallery.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/*");
                getParent().startActivityForResult(intent, REQUEST_ID);

            }
        });

        ivCamera.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
                File f = new File(Environment.getExternalStorageDirectory(),  "photo.jpg");
                i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                mUri = Uri.fromFile(f);
                getParent().startActivityForResult(i, TAKE_PICTURE);
            }
        });


    }




    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case TAKE_PICTURE:
            if (resultCode == Activity.RESULT_OK && data != null) 
            {
                getContentResolver().notifyChange(mUri, null);
                ContentResolver cr = getContentResolver();

                try 
                {
                    mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, mUri);
                   GalleryPic_Second.bmp = mPhoto;

                }

                catch (Exception e) 
                {
                    Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
                }


            }


            break;
        case REQUEST_ID :
            InputStream stream = null;
             if (resultCode == Activity.RESULT_OK && data != null) {

                 try
                 {
                    stream = getContentResolver().openInputStream(data.getData());
                    Bitmap original = BitmapFactory.decodeStream(stream);
                    GalleryPic_Second.bmp = Bitmap.createScaledBitmap(original, original.getWidth()/HALF, original.getHeight()/HALF, true);

                    Intent in = new Intent(GalleryPic.this, GalleryPic_Second.class);
                    TabGroupActivity parent = (TabGroupActivity)getParent();
                    parent.startChildActivity("ArrowsActivity", in);  


                 }

                 catch (Exception e) 
                 {
                    e.printStackTrace();
                 }
                if (stream != null) {
                    try {
                        stream.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }



             }

            break;  
        }

    }


    @Override
    public void onBackPressed() {
    // this.getParent().onBackPressed();
         TabViewLayout parentTab = (TabViewLayout) this.getParent();
         parentTab.switchTabBar(1);

    }

  }

GalleryPic_Second.java

public class GalleryPic_Second extends Activity {
    public static Bitmap bmp;
    Button btnUpload;
    ImageView iv;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.transparent_dialog);
        View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.transparent_dialog, null);
        this.setContentView(viewToLoad);
        setResult(RESULT_OK);
        iv = (ImageView)viewToLoad.findViewById(R.id.photo_holder);
        btnUpload = (Button)viewToLoad.findViewById(R.id.upload);
        iv.setImageBitmap(bmp);

        btnUpload.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                finish();
            }
        });
    }

     @Override
        public void onBackPressed() {
        // this.getParent().onBackPressed();
             finish();

        }

     public void onActivityResult(int reqCode, int resultCode, Intent data) {
            super.onActivityResult(reqCode, resultCode, data);
        }
}

但是图像没有显示在第二个活动中。这个怎么做?

4

1 回答 1

0

这样叫

 GalleryPic.this.startActivityForResult(intent, REQUEST_ID);
于 2013-09-20T11:37:18.247 回答