问题描述
使用yuriy-budiyev/code-scanner已实现条形码扫描。
布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical"
android:id="@+id/root"
android:padding="10dp">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.budiyev.android.codescanner.CodeScannerView
android:id="@+id/scanner_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoFocusButtonColor="@android:color/white"
app:autoFocusButtonVisible="true"
app:flashButtonColor="@android:color/white"
app:flashButtonVisible="true"
app:frameColor="@android:color/white"
app:frameCorneRSSize="50dp"
app:frameCornersRadius="0dp"
app:frameAspectRatioWidth="1"
app:frameAspectRatioHeight="1"
app:frameSize="0.75"
app:frameThickness="2dp"
app:maskColor="#77000000"/>
</FrameLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
ScanFragment
public class ScanFragment extends Fragment {
private CodeScanner mCodeScanner;
public String scan;
@Override
@Nullable
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
final Activity activity = getActivity();
View root = inflater.inflate(R.layout.scan,container,false);
CodeScannerView scannerView = root.findViewById(R.id.scanner_view);
mCodeScanner = new CodeScanner(activity,scannerView);
mCodeScanner.setDecodeCallback(result -> {
activity.runOnUiThread(() -> Toast.makeText(activity,result.getText(),Toast.LENGTH_LONG).show());
scan = result.getText();
goBack(scan);
});
scannerView.setonClickListener(v -> mCodeScanner.startPreview());
return root;
}
public void goBack(String scanResult)
{
Fragment fr=new NewFormFragment();
FragmentManager fm=getFragmentManager();
android.app.FragmentTransaction ft=fm.beginTransaction();
Bundle args = new Bundle();
args.putString("SCAN",scanResult);
fr.setArguments(args);
ft.replace(R.id.fragment_container,fr);
ft.commit();
}
@Override
public void onResume() {
super.onResume();
mCodeScanner.startPreview();
}
@Override
public void onPause() {
mCodeScanner.releaseResources();
super.onPause();
}}
我通过我的主要片段称呼上面的片段
@BindView(R.id.start_scan)
ImageButton startScan;
public class NewFormFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,Bundle savedInstanceState) {
if (view == null) {
view = inflater.inflate(R.layout.new_form_layout,false);
ButterKnife.bind(this,view);
bindListners();
installStatusspinner.setEnabled(false);
//imsiNo.setVisibility(View.GONE);
ctRatio.setVisibility(View.GONE);
btnMaterial.setEnabled(false);
linearLayoutMaterial.setVisibility(View.GONE);
linearLayoutimsi.setVisibility(View.GONE);
linearLayoutSignOff.setVisibility(View.GONE);
meterType.setVisibility(View.GONE);
disableTextViews();
disableMeterGroup();
setupUI(mScrollView);
}
Bundle arguments = getArguments();
if (arguments != null && arguments.containsKey("install_id")) {
isNewInstall = false;
editInstallId = arguments.getString("install_id");
getActivity().setTitle(getString(R.string.title_fragment_edit_form));
setEditData();
//imsiNo.setVisibility(View.GONE);
linearLayoutimsi.setVisibility(View.GONE);
linearLayoutSignOff.setVisibility(View.GONE);
ctRatio.setVisibility(View.GONE);
resetFormButton.setVisibility(View.GONE);
} else {
getActivity().setTitle(getString(R.string.title_fragment_new_form));
}
if(getArguments()!=null)
{
selectedMeterNo = getArguments().getString("SCAN");
smartMsnSpinner.setText(selectedMeterNo);
}
/*mCoordinatesReceiver = new CoordinatesReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Common.GetCoordinatesAction());
getActivity().registerReceiver(mCoordinatesReceiver,intentFilter);*/
return view;
}
public void bindListners()
{
startScan.setonClickListener(startScanning);
}
private final View.OnClickListener startScanning = v -> {
if(v.getId()==R.id.start_scan){
Fragment fragment = null;
fragment = new ScanFragment();
replaceFragment(fragment);
}
};
public void replaceFragment(Fragment someFragment) {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container,someFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
现在,当我单击扫描按钮时,我可以看到我的扫描片段视图。成功扫描后,我将扫描的文本传递给may NewFormFragment
。但是有一个问题,我不想重新创建NewFormFragment
视图。我想通过保留以前的视图将扫描的文本传递到NewFormFragment
。
注意:当我运行我的应用时,将调用NewFormFragment
。
任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)