onActivityResult 在片段选项卡中不起作用

onActivityResult doesn't work in fragment tab

我有一个使用 listView 的片段选项卡。 listview(arrayAdapter)的每一行都有一个图片按钮,我设置按钮点击事件是这样的:

public View getView(final int position, View convertView, ViewGroup parent) 
{
    View row = convertView;

    if (row == null) {
        LayoutInflater inflater = (LayoutInflater) this.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.vehiclereservationdocument_list, parent, false);
    }

    VehicleReservationDocument vrDocument = getItem(position);

    Button btnTakePicture = (Button) row.findViewById(R.id.btnTakePicture);
    btnTakePicture.setTag(R.id.WOP_POSITION, position);
    btnTakePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            takePicture((Integer) view.getTag(R.id.WOP_POSITION));
        }
    });

    btnTakePicture.setVisibility(View.VISIBLE);

    return row;
}

public void takePicture(int position) {
    // Ação do botão

    documentStrategy = DocumentStrategy.PICTURE;
    VehicleReservationDocument vrd = vehicleReservationDocuments.get(position);
    this.argDocument = position;

    fileUri = getOutputMediaFileUri(vrd.getVehicleReservation());

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    VehicleReservationTabFragment.fragmentWhoCalledStartActivityForResult = VehicleReservationTabFragment.VehicleReservationTabFragmentGroupId.TAB_VEHICLERESERVATION_DOCUMENT.ordinal();
    TabVehicleReservationDocumentFragment.setFileUri(fileUri);
    TabVehicleReservationDocumentFragment.setArgDocument(argDocument);

    ((Activity) context).startActivityForResult(intent, documentStrategy.ordinal());
}

我的 tabFragment 中的 ActivityResult:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        ACTION _actionOrigin = TabVehicleReservationDocumentFragment._actionOrigin;

        UploadDocument uploadDocument = new UploadDocument(getActivity(), _actionOrigin);
        uploadDocument.execute();
}

拍完照片需要去onActivityResult,但是不行,没有调用事件。任何人都可以帮助我吗?谢谢!!!

只使用没有上下文的 startActivityForResult

startActivityForResult(intent, documentStrategy.ordinal());

将您的 takePicture 方法移动到片段 class 中。并使用

startActivityForResult(intent, documentStrategy.ordinal());

而不是

((Activity) context).startActivityForResult(intent, documentStrategy.ordinal());

第一个方法回调片段 onActivityResult 其中,第二个回调 activity 的 onActivityResult

要在片段中获取结果,请确保调用 startActivityForResult(intent,111);而不是 getActivity().startActivityForResult(intent,111);在你的片段中。

当你设置你的适配器然后做这样的事情希望这会帮助你。

YourAdapter adapter = new YourAdapter(do your stuff, clickListener);
listView.setAdapter(adapter);


Define this method in your Activity

View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        documentStrategy = DocumentStrategy.PICTURE;
        VehicleReservationDocument vrd = vehicleReservationDocuments.get(position);
        this.argDocument = position;

        fileUri = getOutputMediaFileUri(vrd.getVehicleReservation());

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        VehicleReservationTabFragment.fragmentWhoCalledStartActivityForResult = VehicleReservationTabFragment.VehicleReservationTabFragmentGroupId.TAB_VEHICLERESERVATION_DOCUMENT.ordinal();
        TabVehicleReservationDocumentFragment.setFileUri(fileUri);
        TabVehicleReservationDocumentFragment.setArgDocument(argDocument);

        startActivityForResult(intent, documentStrategy.ordinal());
    }
};

**Your Adapterclass**

public class YourAdapter extend BaseAdapter {
    private View.onClickListener clickListener;

    public YourAdapter(your stuff, View.onClickListener clickListener) {
        this.clickListener = clickListener;
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        View row = convertView;

        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.vehiclereservationdocument_list, parent, false);
        }

        VehicleReservationDocument vrDocument = getItem(position);


        Button btnTakePicture = (Button) row.findViewById(R.id.btnTakePicture);
        btnTakePicture.setTag(R.id.WOP_POSITION, position);
        btnTakePicture.setOnClickListener(clickListener);

        btnTakePicture.setVisibility(View.VISIBLE);

        return row;
    }
}