2013-08-07 131 views
0

有沒有一種方法可以通過Gallery.class更改Main.class類的ImageView?通過其他活動更改佈局

我的主類的onClick調用Gallery.class

public void setImage(int currentView) { 

    Log.d("fgdsf","dumaan dito"); 
    this.currentView = currentView; 
    Intent gallery = new Intent(Intent.ACTION_PICK, 
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(gallery, RESULT_LOAD_IMAGE); 

} 

的方法setImage,這是onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK 
      && null != data) { 
     Uri selectedImage = data.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 picturePath = cursor.getString(columnIndex); 
     cursor.close(); 

     LayoutInflater inflater = (LayoutInflater) mActivity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflater.inflate(R.layout.activity_main, null); 

     if (currentView == 0) { 
      ImageView imageView = (ImageView) v 
        .findViewById(R.id.imageView1); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 
     if(currentView==1) 
     { 
      ImageView imageView = (ImageView) v 
        .findViewById(R.id.imageView2); 
      imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
     } 

    } 
} 

,我得到這個錯誤

八月八日至7日:35:08.208:E/AndroidRuntime(15689):引起:java.lang.NullPointerException 08-07 08:35:08.208:E/Androi dRuntime(15689):at android.app.Activity.startActivityForResult(Activity.java:3370)

回答

0

我不認爲你可以。您只能控制當前活動的佈局及其組件。由於該組件不在當前Activity的視圖中(在您的情況下是Gallery),因此訪問它將拋出NullPointerException。你可以做的是,將你所選圖像的路徑傳遞給Main類,然後檢索圖像路徑並將其設置爲ImageView。

+0

你說得對謝謝:) – RonPelayo

0

我覺得你最好的選擇是設置界面Gallery.class,像

public class Gallery extends Activity { 

    public interface MyClickListener { 
     public void OnClick(); 
    } 

    private MyClickListener listener; 

然後在你的onClick,設置你的OnClick(listener.OnClick())。在Main.class中,您將不得不導入「MyClickListener」並定義您想要執行的任何操作。

0

對於捕獲圖像

這是以前是返回圖像URI路徑,但現在它從畫廊返回位圖在Android 4.0版開始

發生。

所以要解決這個問題。

File file = new File(Environment.getExternalStorageDirectory() + "/DCIM/", "image" + new Date().getTime() + ".jpg"); 

Uri imgUri = Uri.fromFile(file); 
String imagepath = file.getAbsolutePath(); 

final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, imagepath); 
startActivityForResult(intent, CAPTURE_IMAGE); 


@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != Activity.RESULT_CANCELED) { 
      if (requestCode == CAPTURE_IMAGE) { 
       imgUser.setImageBitmap(BitmapFactory.decodeFile(imagepath); 
      } else { 
       super.onActivityResult(requestCode, resultCode, data); 
      } 
     } 

    } 

對於選擇圖片從GALLARY

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, ""), PICK_IMAGE); 


public String getAbsolutePath(Uri uri) { 
     String[] projection = { MediaColumns.DATA }; 
     @SuppressWarnings("deprecation") 
     Cursor cursor = managedQuery(uri, projection, null, null, null); 
     if (cursor != null) { 
      int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
      cursor.moveToFirst(); 
      return cursor.getString(column_index); 
     } else 
      return null; 
    } 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode != Activity.RESULT_CANCELED) { 
      if (requestCode == PICK_IMAGE) { 

      imgUser.setImageBitmap(BitmapFactory.decodeFile(getAbsolutePath(data.getData())); 
      } else { 
       super.onActivityResult(requestCode, resultCode, data); 
      } 
     } 

    }