2016-03-01 3 views
2

У меня проблема с использованием намерения камеры в фрагменте. У меня есть Activity, который содержит фрагменты, и у меня есть четыре фрагмента. В моем 3-м фрагменте я вызываю камеру Intent. После выполнения снимка приложение не возобновляется только на третьем фрагменте, но также появляется первый фрагмент. Вы можете увидеть фотографии и код.Цель камеры в фрагменте

Спасибо за любые решения.

Код:

public class CreateAttachment extends Fragment{ 

private RelativeLayout btnBack, btnNext; 
private LinearLayout btnAttachment, btnCapture; 

private static final int CAMERA_REQUEST_CODE = 100; 
public static final int MEDIA_TYPE_IMAGE = 1; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.create_property_attachment, container, false); 

    btnBack = (RelativeLayout) view.findViewById(R.id.attachment_btnBack); 
    btnBack.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      getFragmentManager().popBackStack(); 
     } 
    }); 

    btnNext = (RelativeLayout) view.findViewById(R.id.attachment_btnNext); 
    btnNext.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      nextFragment(); 
     } 
    }); 

    btnAttachment = (LinearLayout) view.findViewById(R.id.btnAttachment); 
    btnAttachment.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      intent.setType("image/*"); 
      intent.setAction(Intent.ACTION_GET_CONTENT); 
      intent.putExtra("return-data", true); 
      startActivityForResult(Intent.createChooser(intent, "Complete action using"), MEDIA_TYPE_IMAGE); 
     } 
    }); 

    btnCapture = (LinearLayout) view.findViewById(R.id.btnCameraAccess); 
    btnCapture.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(cameraIntent, CAMERA_REQUEST_CODE); 
     } 
    }); 

    return view; 
} 


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

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

     Toast.makeText(getActivity(),"Photo is Chosen",Toast.LENGTH_SHORT).show(); 
    } 
    else if (requestCode == CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK) { 

     Toast.makeText(getActivity(),"Photo is Captured",Toast.LENGTH_SHORT).show(); 
    } 
    } 
}           

Изображения: Here is my screenshot for 1st fragment, 3rd fragment, and the issue after take a picture by Camera Intent in the 3rd fragment.

+0

Это то же самое происходит и для 'btnAttachment'? – Bhargav

+0

Для btnAttachment отлично работает. – Peter

+0

попробуйте удалить строку 'super.onActivityResult (requestCode, resultCode, data);' – Bhargav

ответ

0

Спасибо за весь ваш ответ. Во всяком случае, я точно не знаю, что такое ошибка, но способ исправить это - переопределить эти две функции Activity на моем третьем фрагменте.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Toast.makeText(getActivity(), "Work on onCreate when return into Fragment.", Toast.LENGTH_SHORT).show(); 
} 


@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
} 
0

попробовать это

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, 
         CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE); 

в OnActivityResult удалить super.onActivityResult(requestCode, resultCode, data);

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 



    } 
+0

Это может быть решение, но я не знаю, как сохранить и восстановить InstanceState. Так что, пожалуйста, поделитесь мне каким-нибудь примером? – Peter

+0

после удаления строки кода, она по-прежнему показывает ту же проблему. когда мы пытаемся сделать снимок более одного раза. – Peter

0

Ваша проблема может быть в вашем коде фрагмента добавления/замены. ваш 1-й и 3-й фрагменты перекрываются, потому что вы могли бы не скрывать (фрагментировать) ваш фрагмент при замене 1-го фрагмента на 3-й фрагмент.

Смежные вопросы