2

在这里,我必须从图库或相机中选择图像。当用户从图库中选择图像时,该选择的图像应显示到下一个活动。但是在这里,这两个活动都在同一个选项卡下,比如选项卡 A。意味着选项卡 A 中有两个活动。在第一个活动中,用户有两个选项可以从图库或相机中选择图像。在同一选项卡 A 下的第二个活动中,用户获取该选定图像。但在这里我没有得到预期的输出。下面是我的代码...

MainActivity.java

public class MainActivity extends TabActivity {

    TabHost tabHost;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Resources ressources = getResources(); 
        tabHost = getTabHost(); 

        Intent intentProfile = new Intent().setClass(this, Tab1.class);
        TabSpec tabProfile = tabHost
          .newTabSpec("Profile")
          .setIndicator("Profile", ressources.getDrawable(R.drawable.ic_launcher))
          .setContent(intentProfile);

        Intent intentFriends = new Intent().setClass(this, Tab2.class);
        TabSpec tabFriends = tabHost
          .newTabSpec("Friends")
          .setIndicator("Friends", ressources.getDrawable(R.drawable.ic_launcher))
          .setContent(intentFriends);


        tabHost.addTab(tabProfile);
        tabHost.addTab(tabFriends);

        tabHost.setCurrentTab(0);

    }


    public void switchTabBar(int tab) {
        tabHost.setCurrentTab(tab); 
    }
    @Override
      public void onBackPressed() {
        // Called by children
        MainActivity.this.finish();
        }

}

ABCGroup.java

public class ABCGroup extends ActivityGroup{

public static ABCGroup group;
private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>();
    group = this;

    View view = getLocalActivityManager().startActivity
                ("ParentActivity", 
                new Intent(ABCGroup.this, Tab1.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                .getDecorView();

    replaceView(view);
}

public void replaceView(View v) {
    // Adds the old one to history
    history.add(v);
    // Changes this Groups View to the new View.
    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);
}
}

Tab1.java

 public class Tab1 extends ActivityGroup {

        Button gallery, camera;
        private ArrayList<View> myActivityHistory;
        private static final int REQUEST_ID = 1;
        private static final int HALF = 2;
        private static final int TAKE_PICTURE = 3;
        private Uri mUri;
        private Bitmap mPhoto;
        int i = 0;
        @SuppressWarnings("deprecation")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.tab1);
            myActivityHistory = new ArrayList<View>();

            gallery = (Button)findViewById(R.id.gallery);
            camera = (Button)findViewById(R.id.camera);

            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/*");
                        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);
                        startActivityForResult(i, TAKE_PICTURE);
                    }
                });
        }



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


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

                        try 
                        {
                            mPhoto = null;
                            mPhoto = android.provider.MediaStore.Images.Media.getBitmap(cr, mUri);
                            Uri selectedImageUri = data.getData();
                            String selectedImagePath = getPath(selectedImageUri);
                        }

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

                    }


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

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

                            Intent in = new Intent(Tab1.this, Second.class);
                            replaceContentView("activity3",  in, Intent.FLAG_ACTIVITY_CLEAR_TASK);
                         }

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


                     }

                        break;
                }
            }

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

                cursor.moveToFirst();
                Toast.makeText(getBaseContext(), "" + cursor.getString(column_index) , 5000).show();

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

                return cursor.getString(column_index);
            }

    }

二.java

public class Second extends ActivityGroup {

    public static Bitmap bmp;
     String path;
    ImageView iv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        Button btn = (Button)findViewById(R.id.button1);
        iv = (ImageView)findViewById(R.id.imageView1);

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

            Bitmap 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() {
        // this.getParent().onBackPressed();
         Intent intent = new Intent(Second.this, Tab1.class);
          Tab1 parentActivity = (Tab1)getParent();  
          parentActivity.replaceContentView("Profile", new Intent(Second.this, Tab1.class), Intent.FLAG_ACTIVITY_CLEAR_TASK); 

        }

}
4

0 回答 0