【发布时间】:2016-08-04 20:06:25
【问题描述】:
我正在使用导航抽屉创建一个简单的 QR 扫描应用程序来抛出不同的片段,对于 QR 扫描部分,我使用的是 ZXing Scanner 库。
在其中一个片段中,有一个叫做“扫描”的按钮,当点击下面的代码运行时
mScannerView = new ZXingScannerView(this);
setContentView(mScannerView); // HERE IS THE begining OF THE PROBLEM
mScannerView.setResultHandler(this);
mScannerView.startCamera();
现在在handleResult 方法中,我应该编写以下代码来关闭相机。
mScannerView.stopCamera();
setContentView(R.layout.activity_main); // THE PROBLEM OCCUERS HERE
当我运行这段代码时,我得到Binary XML file line #36: Binary XML file line #36: Error inflating class fragment
有什么办法解决这个问题吗?
代码:
主要活动:
public class MainActivity extends AppCompatActivity implements FragmentDrawer
.FragmentDrawerListener, ZXingScannerView.ResultHandler {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawerFragment = (FragmentDrawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id
.drawer_layout), mToolbar);
drawerFragment.setDrawerListener(this);
displayView(0);
}
@Override
public void onDrawerItemSelected(View view, int position) {
displayView(position);
}
private void displayView(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new QRScanerFragment();
title = getString(R.string.title_logout);
break;
default:
break;
}
if (fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_body, fragment);
fragmentTransaction.commit();
}
}
public void scan(View view) {
mScannerView = new ZXingScannerView(this);
setContentView(mScannerView);
mScannerView.setResultHandler(this);
mScannerView.startCamera();
}
@Override
public void handleResult(Result result) {
Log.e("QR result", result.getText());
mScannerView.stopCamera();
setContentView(R.layout.activity_main);
}
@Override
protected void onPause() {
super.onPause();
mScannerView.stopCamera();
}
}
对于 XML:
<android.support.v4.widget.DrawerLayout
xmlns:app="http://schemas.android.com/apk/res-auto xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/container_body"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
<fragment
android:id="@+id/fragment_navigation_drawer"
android:name="com.bassiouny.androidqrtask.fragments.FragmentDrawer"
android:layout_width="@dimen/nav_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer"
tools:layout="@layout/fragment_navigation_drawer" />
【问题讨论】:
-
我可能会避免多次调用
setContentView(),因为这将重绘整个视图。为什么不在单独的片段中调用相机,或者如果您再次绘制整个屏幕,为什么不开始一个新的活动(为了结果)?无论如何,就实际问题而言,显示一些代码。您的 XML 文件中有什么内容,它试图扩展的片段类是什么样的? -
当然你会得到 setContentView() 错误,你不能这样做,你要么开始一个新的活动,要么像@Bryan说的那样片段
-
@Bryan,我添加了代码,我正在尝试找到一种方法,让我可以同时使用 QR 扫描仪的库和导航抽屉,这就是为什么我不将相机称为我需要这样做扔图书馆。
标签: android android-fragments navigation-drawer qr-code zxing