ナビゲーション・ドロワーを使用して単純なQRスキャン・アプリケーションを作成し、異なるフラグメントをスローすると、QRスキャニング・パーツでZXingスキャナー・ライブラリーを使用しています。私はカメラを閉じるには、次のコードを記述する必要がありhandleResult
方法では、今、次のコードの実行Android - ナビゲーションドロワーのアクティビティのコンテンツビューを変更する
mScannerView = new ZXingScannerView(this);
setContentView(mScannerView); // HERE IS THE begining OF THE PROBLEM
mScannerView.setResultHandler(this);
mScannerView.startCamera();
をクリックすると断片の一つで
は、「スキャン」というボタンがあります。私はこのコードを実行すると
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
任意のアイデアを得ますか?
コード:
主な活動:XML用として
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();
}
}
:
<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スキャナーのライブラリーとナビゲーション・ドロワーの両方を使用できるようになります。なぜ、私はライブラリーをスローする必要があるので、カメラを呼び出さないのですか。 –