在android中使用Activitygroup的子活动中图像不会改变

时间:2013-09-26 07:31:12

标签: android android-tabs activitygroup

在我的应用中,我'使用Tab。有三个选项卡。其中第三个选项卡是具有两个活动的活动组。在第一个活动中,用户有两种选择。用户可以从相机或图库中选择图像。选择图像后,用户应移至子活动,这将显示该活动中的所选图像。直到这个应用程序工作正常。但是我面临的唯一问题是,当我从儿童活动回到父母活动时,图像没有被清除。意味着一旦我从画廊/相机选择图像,用户移动到儿童活动,并且图像正在儿童活动中显示。现在当我从儿童活动按下后退按钮时,如果用户从厨房/摄像机中选择不同的图像,则用户返回到父活动,并且在儿童活动中不存在不同的图像。儿童活动中存在上一张图片。以下是我的代码。

ABCGroup.java

public class ABCGroup extends ActivityGroup{

public static ABCGroup group;
private ArrayList<View> history;
View view;
int column_index;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>();
    group = this;
    view = getLocalActivityManager().startActivity("ParentActivity", new Intent(ABCGroup.this, Tab1.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)).getDecorView();
    replaceView(view);
 }

public void replaceView(View v) {

    history.add(v);
    setContentView(v);
}

public void back() {  


    if(history.size() > 0) 
    {  

        history.remove(history.size()-1);
        if(history.size()<=0)
        {
            finish();
        }
        else
        {
            setContentView(history.get(history.size()-1));

        }
    }
    else 
    {  
        finish(); 
    }  

}

@Override  
public void onBackPressed() {  
    ABCGroup.group.back();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
    if (keyCode == KeyEvent.KEYCODE_BACK){
        ABCGroup.group.back();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    InputStream stream = null;
    if (requestCode == Tab1.REQUEST_ID && resultCode == Activity.RESULT_OK) {

         try
         {
            stream = getContentResolver().openInputStream(data.getData());
            Bitmap original = null;
            original= BitmapFactory.decodeStream(stream);
            Uri selectedImageUri = data.getData();
            String selectedImagePath = getPath(selectedImageUri);

        }

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



    if (requestCode == 3 && resultCode == Activity.RESULT_OK) 
    {

        getContentResolver().notifyChange(Tab1.mUri, null);
        ContentResolver cr = getContentResolver();

        try 
        {
            Tab1.mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, Tab1.mUri);
            Second.bmp = Tab1.mPhoto;
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            Tab1.mPhoto.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
            File direct = new File(Environment.getExternalStorageDirectory() + "/ABCGroup");
            String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
            Toast.makeText(getBaseContext(), "Time :" + mydate, 5000).show();
            if(!direct.exists())
            {
                direct.mkdir();
                File file = new File(Environment.getExternalStorageDirectory()+File.separator + "/ABCGroup/image" + mydate +".jpg");
                file.createNewFile();
                FileOutputStream fo = new FileOutputStream(file);
                fo.write(bytes.toByteArray());
                fo.close();
             }

         else
            {
                File file = new File(Environment.getExternalStorageDirectory()+File.separator + "/ABCGroup/image" + mydate +".jpg");
                file.createNewFile();
                FileOutputStream fo = new FileOutputStream(file);
                fo.write(bytes.toByteArray());
                fo.close();
            }

            View mview = ABCGroup.group.getLocalActivityManager().startActivity("activity3", new Intent(ABCGroup.this, Second.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)).getDecorView();
            replaceView(mview);
        }

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


   public String getPath(Uri uri) {
       String[] projection = { MediaStore.Images.Media.DATA };
       Cursor cursor = managedQuery(uri, projection, null, null, null);
       column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
       cursor.moveToFirst();

       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
       SharedPreferences.Editor editor = preferences.edit();
       editor.putString("data", cursor.getString(column_index) );
       editor.commit();

       View mview = ABCGroup.group.getLocalActivityManager().startActivity("activity3", new Intent(ABCGroup.this, Second.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY)).getDecorView();
       replaceView(mview);


       return cursor.getString(column_index);
   }

   public void onResume()
   {
       super.onResume();
       column_index = 0;
   }

}

Tab1.java

public class Tab1 extends ActivityGroup {

    Button gallery, camera;
    private ArrayList<View> myActivityHistory;
    ImageView iv;

    private static final int TAKE_PICTURE = 3;
    public static final int REQUEST_ID = 1;
    private static final int HALF = 2;
    public static Uri mUri;
    public static Bitmap mPhoto;
    int i = 0;
    @SuppressWarnings("deprecation")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.tab1);
         View viewToLoad = LayoutInflater.from(Tab1.this.getParent()).inflate(R.layout.tab1, null);
         Tab1.this.setContentView(viewToLoad);
        myActivityHistory = new ArrayList<View>();

        gallery = (Button)viewToLoad.findViewById(R.id.gallery);
        camera = (Button)viewToLoad.findViewById(R.id.camera);
        iv = (ImageView)viewToLoad.findViewById(R.id.iv);
        gallery.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/*");
                    ABCGroup.group.startActivityForResult(intent, REQUEST_ID);
                }
            });

            camera.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);
                    ABCGroup.group.startActivityForResult(i, TAKE_PICTURE);
                }
            });
    }



    public void replaceContentView(String id, Intent newIntent) 
    {
        View mview = ABCGroup.group.getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)).getDecorView();
        ABCGroup.group.replaceView(mview);
    }


}

Second.java

public class Second extends Activity {

    public static Bitmap bmp;
    Bitmap myBitmap;
    String path;
    ImageView iv;
    int count = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        View viewToLoad = LayoutInflater.from(Second.this.getParent()).inflate(R.layout.second, null);
        Second.this.setContentView(viewToLoad);
        Button btn = (Button)viewToLoad.findViewById(R.id.button1);
        iv = (ImageView)viewToLoad.findViewById(R.id.imageView1);

        iv.setImageBitmap(bmp);
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        path = preferences.getString("data", "");
        File imgFile = new  File(path);
        if(imgFile.exists()){

            Toast.makeText(getBaseContext(),  "" + path, 1000).show();

            myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            iv.setImageBitmap(myBitmap);

        }

        btn.setOnClickListener(new OnClickListener() { 
              @Override 
              public void onClick(View v) {
                  ABCGroup.group.back();
              }
            });

    }

     @Override
        public void onBackPressed() {
         super.onBackPressed();
          Intent intent = new Intent(Second.this, Tab1.class);
          Tab1 parentActivity = (Tab1)getParent();  
          parentActivity.replaceContentView("Profile", new Intent(Second.this, Tab1.class).addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY ) ); 


        }
     public void onResume()
       {
           super.onResume();

       }
}

1 个答案:

答案 0 :(得分:1)

最后我得到了答案

public void onResume()
       {
           super.onResume();

           SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
           path = preferences.getString("data", "");
           imgFile = new  File(path);
           Toast.makeText(getBaseContext(), "" + path, 2000).show();
           if(imgFile.exists())
           {
               myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
               iv.setImageBitmap(myBitmap);
           }
       }