Arhn - архитектура программирования

Намерение камеры во фрагменте

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

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

Код:

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

Изображения: Вот мой скриншот для 1-го фрагмента, 3-го фрагмента и проблемы после снимка с помощью Camera Intent. в 3-м фрагменте.


  • то же самое происходит и с btnAttachment? 01.03.2016
  • Для btnAttachment работает нормально. 01.03.2016
  • попробуйте удалить строку super.onActivityResult(requestCode, resultCode, data); 01.03.2016
  • Вы можете установить белый цвет фона (#ffffff) для всех ваших макетов для фрагментов, это решит эту проблему. 01.03.2016
  • @Peter Питер, ты получаешь обратный вызов (OnActivityResult) в 3-м фрагменте? виден ли тост после клика по фото? 01.03.2016
  • @SuhasB да, мне перезванивают в моем третьем фрагменте. тост за шоу 01.03.2016
  • @Bhargav, он все еще показывает ту же проблему. 01.03.2016
  • @ user5716019, он все еще показывает ту же проблему. 01.03.2016

Ответы:


1

попробуй это

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



    }
01.03.2016
  • Это может быть решением, но я не знаю, как сохранить и восстановить InstanceState. Итак, не могли бы вы поделиться со мной каким-нибудь примером? 01.03.2016
  • после удаления строки кода она по-прежнему показывает ту же проблему. когда мы пытаемся сделать снимок более одного раза. 01.03.2016

  • 2

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

    04.03.2016

    3

    Спасибо за все ваши ответы. Во всяком случае, я точно не знаю, в чем ошибка, но способ исправить это - переопределить эти две функции 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);
    }
    
    14.03.2016
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..