Я создаю приложение простого сканирования QR, используя навигационный ящик, чтобы перейти на разные фрагменты, для части QR-сканирования я использую библиотеку ZXing Scanner.Android - Изменение содержимого содержимого активности навигационного ящика
В одном из фрагментов, есть кнопка под названием «сканирование», при нажатии на следующий запуск кода
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-файле и что класс фрагмента выглядит так, что он пытается раздуть? – Bryan
Конечно, вы получите ошибку с setContentView(), вы не можете сделать это таким образом, чтобы начать новую деятельность или как @Bryan сказал фрагмент – has19
@Bryan, я добавил код, я пытаюсь найти способ что позволит мне использовать как библиотеку QR-сканера, так и навигационный ящик, поэтому я не звоню в камеру, так как мне нужно это бросить в библиотеку. –