0

Я стоял перед большой проблемой, я уже много раз просил, но никто не мог мне помочь.ImageView не вставляет изображение камеры во фрагмент

Как и в названии, я сделал Android-приложение с тремя фрагментами. В одном фрагменте я хочу открыть камеру, когда щелкнул пустой ImageView. После выполнения снимка ImageView должен отображать захваченное изображение с камеры.

Приложение открывает камеру, а также снимает рис., Но не вставляет изображение в ImageView.

Этот код находится в моем фрагменте

public class FragmentNew extends Fragment {

public static final int CAMERA_PIC_REQUEST_1 = 1; 
public static final int CAMERA_PIC_REQUEST_2 = 2; 
public static final int SELECT_PIC_REQUEST_1 = 3; 
public static final int SELECT_PIC_REQUEST_2 = 4; 

ImageView imageView1; 
ImageView imageView2; 
View rootView; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 

    final View rootView = inflater.inflate(R.layout.fragment_new,container, false); 
    imageView1 = (ImageView) rootView.findViewById(R.id.image_pic1); 
    imageView2 = (ImageView) rootView.findViewById(R.id.image_pic2); 

    return rootView; 
} 


public void check(int requestCode, int resultCode, Intent data,ImageView imv1,ImageView imv2) { 

    Log.d("Name", "onActivityResult"); 
    switch(requestCode){ 
     case CAMERA_PIC_REQUEST_1: 
      if(resultCode== Activity.RESULT_OK && data != null && data.getExtras().get("data")!=null){ 
        Log.d("TAG1","Photo pic1"); 
        Bitmap photo = (Bitmap) data.getExtras().get("data");      
        imv1.setImageBitmap(photo); 
        Log.d("TAG1","Photo pic1 was set"); 

      } 
      break; 

     case CAMERA_PIC_REQUEST_2: 
      if(resultCode== Activity.RESULT_OK && data != null && data.getExtras().get("data")!=null){ 
        Log.d("TAG2","Photo pic2"); 
        Bitmap photo2 = (Bitmap) data.getExtras().get("data"); 
        //imv2.setImageBitmap(photo2); 
        imv2.setBackgroundColor(Color.rgb(255, 0, 255)); 
        Log.d("TAG2","Photo pic2 was set"); 
      } 
      break; 

      default: 
       Log.d("Error","It doesn't work"); 
    } 
} 

}

MainActivity:

public void onButtonClick(View view) 
{ 
    switch(view.getId()) 
    { 
    case R.id.image_accept: 
     EditText text; 
     text = (EditText)findViewById(R.id.edit_title); 
     Toast.makeText(this,"Decision "+ text.getText().toString()+" was created!",Toast.LENGTH_SHORT).show(); 
     break; 
    case R.id.image_pic1: 
     Builder builderpic1 = new Builder(this); 
     builderpic1.setTitle("Pick a Pic") 
       .setIcon(android.R.drawable.ic_dialog_info) 
       .setItems(R.array.selection, new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        switch(which) 
        { 
        case 0: 
         //Intent galeryintent = new Intent(Intent.ACTION_VIEW, Uri.parse(
         //  "content://media/internal/images/media")); 
         //  startActivity(galeryintent); 

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

         Intent intent = new Intent(); 
         intent.setType("image/*"); 
         intent.setAction(Intent.ACTION_GET_CONTENT); 
         //startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PIC_REQUEST_1); 
         startActivityForResult(intent, FragmentNew.SELECT_PIC_REQUEST_1);   
         break; 
        case 1: 
         Intent photointent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
         startActivityForResult(photointent, FragmentNew.CAMERA_PIC_REQUEST_1); 

         break; 
        case 2:  
         Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://images.google.com/")); 
         startActivity(browserIntent); 
         break; 
        } 

        dialog.dismiss(); 

       } 
      }) 
       .show(); 
     break; 
    case R.id.image_pic2: 
     Builder builderpic2 = new Builder(this); 
     builderpic2.setTitle("Pick a Pic") 
       .setIcon(android.R.drawable.ic_dialog_info) 
       .setItems(R.array.selection, new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        switch(which) 
        { 
        case 0: 
         Intent galeryintent = new Intent(Intent.ACTION_VIEW, Uri.parse(
           "content://media/internal/images/media")); 
           startActivity(galeryintent); 
         break; 
        case 1: 
         Intent photointent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
         startActivityForResult(photointent2, FragmentNew.CAMERA_PIC_REQUEST_2); 
         break; 
        case 2:  
         Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://images.google.com/")); 
         startActivity(browserIntent); 
         break; 
        } 

        dialog.dismiss(); 

       } 
      }) 
       .show(); 
     break; 
    } 
} 


protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Fragment myFragment = (Fragment) getSupportFragmentManager().findFragmentById(R.id.fragment_new); 

    ImageView imv1= (ImageView)findViewById(R.id.image_pic1); 
    ImageView imv2= (ImageView)findViewById(R.id.image_pic2); 

    ((FragmentNew)myFragment).check(requestCode, resultCode, data,imv1,imv2); 
} 

BackgroundColor просто установить, чтобы проверить, если проблема заключается в битовой карте , но BackgroundColor не ch ange тоже, поэтому я думаю, проблема заключается в том, что фрагмент не находит ImageView в onActivityResult(). Log.d показаны на консоли, но ImageView остается пустым.

Надеюсь, вы можете мне помочь.

+0

Я не думаю, что ваш образ не найден, или он был бы нулевым, и у вас было бы исключение NullPointerException в imv2.setBackgroundColor (Color.rgb (255, 0, 255)); Так что, по крайней мере, это еще не ваша проблема. Выводит ли ваш Log.d («TAG2», «Photo pic2»); ? – Damien

+0

Да вывод печатается на консоли – RoterBaron

+0

Он выводит журнал, но не устанавливает фон? Вы можете видеть предыдущий фон? Вы уверены в размерах вашего ImageView? – Damien

ответ

0

Извините, но я не могу найти ваш метод onActivityResult и где вы устанавливаете ImageView OnclickListener. Возможно, они находятся в вашем классе активности. Ваш метод проверки очень похож на метод onActivityResult, за исключением аргументов ImageView. Вы сами называли свой метод проверки? и было ли это в вашем onActivityResult?

Может быть, вы сделали что-то вроде этого, и тогда я не знаю, что это неправильно в вашем коде:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data){ 
    mFragment.check(requestCode, resultCode, data, mImageView1, mImageView2); 
} 

На самом деле, если вы не против сохранения изображения на устройстве, можно также сделать что-то вроде этого:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(outputFile)); 
startActivityForResult(intent,CAMERA_PIC_REQUEST_1); 

И в вашем onActivityResult:

Bitmap bm = BitmapFactory.decodeFile(outputFile.getPath()); 
mImageView1.setImageBitmap(bm); 

Но я думайте, что ваш путь тоже должен работать, я просто не пробовал.

Не могли бы вы добавить еще свой код, чтобы мы могли видеть, где вы вызываете startActivityForResult и свой метод onActivityResult?

+0

Я редактирую новый код, извините, функция check() ранее была функцией onActivityResult(). – RoterBaron