0

Gallery.class を介して Main.class クラスの ImageView を変更する方法はありますか?

私のメインクラスonClickは、Gallery.classのメソッドsetImageを呼び出します

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);

}

これは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));
        }

    }
}

そして、私はこのエラーが発生します

08-07 08:35:08.208: E/AndroidRuntime(15689): 原因: java.lang.NullPointerException 08-07 08:35:08.208: E/AndroidRuntime(15689): android.app.Activity.startActivityForResult(Activity で.java:3370)

4

3 に答える 3

0

私はあなたができるとは思わない。現在のアクティビティとそのコンポーネントのレイアウトのみを制御できます。コンポーネントは現在のアクティビティ (あなたの場合はギャラリー) のビューにないため、アクセスすると NullPointerException がスローされます。できることは、Gallery で選択した画像のパスを Main クラスに渡し、画像パスを取得して ImageView に設定することです。

于 2013-08-07T03:40:41.863 に答える
0

キャプチャー画像用

これは、Android 4.0 以降で発生します。

以前は画像の uri パスを返していましたが、現在はギャラリーからビットマップを返します。

だからこれを解決する。

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);
            }
        }

    }

ギャラリーから画像を選択する場合

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);
            }
        }

    }
于 2013-08-07T11:40:45.393 に答える