【问题标题】:Can't access onActivityResult zxing for fragment无法访问片段的 onActivityResult zxing
【发布时间】:2020-03-25 23:30:24
【问题描述】:

我正在尝试通过片段中的 Zxing 读取条形码

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_caddie, container, false);
    etCodigo = v.findViewById(R.id.etCodigo);
    btnLeerCodigo = v.findViewById(R.id.btnLeerCodigo);

    btnLeerCodigo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            escanear();
        }
    });
    text = "";

    return v;
}


public void escanear() {

    IntentIntegrator intent = IntentIntegrator.forSupportFragment(FragmentCaddie.this);
    //IntentIntegrator intent = new IntentIntegrator(getActivity());
    intent.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
    intent.setPrompt("ESCANEAR CODIGO");
    intent.setCameraId(0);
    intent.setBeepEnabled(false);
    intent.setBarcodeImageEnabled(false);
    intent.initiateScan();

}


 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);

    if(result != null) {
        if(result.getContents() == null) {
            Toast.makeText(getContext(), "Cancelaste el escaneo", Toast.LENGTH_SHORT).show();
        } else {
            text = text + " + " +  result.getContents().toString() ;
            etCodigo.setText(text);
            escanear();
        }
    } else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

问题是它没有访问 onActivityResult

【问题讨论】:

  • 什么意思??? onActivityResult 什么都不返回?
  • @hamidkeyhani 它不访问这个方法一个用过的 log.d 什么都没有,是的它什么也不返回
  • 在您的活动上尝试 onActivityResult 并使用 log.d 然后报告结果

标签: android android-fragments barcode zxing android-fragmentactivity


【解决方案1】:

托管活动覆盖onActivityResult(),但它没有调用super.onActivityResult() 以获取未处理的结果代码。显然,即使片段是发出startActivityForResult() 调用的片段,活动也会首先处理结果。当您考虑片段的模块化时,这是有道理的。一旦我为所有未处理的结果实现了super.onActivityResult(),片段就可以处理结果。

看看这个:

onActivityResult is not being called in Fragment

希望对你有用:)

【讨论】:

【解决方案2】:

解决方案很简单,我实现的onActivityResult 被父活动覆盖

解决办法是从父activity调用片段onActivityResult

private static final int BARECODE_REQUEST = 114910;

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

    if (requestCode == BARECODE_REQUEST) {
        super.onActivityResult(requestCode,resultCode,data);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 2019-04-29
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多