1

グリッド ビューとフル ページ ギャラリー ビューに基づく 2 つの異なるレイアウトを持つアクティビティがあります。ユーザーがグリッド ビューで画像をクリックすると、フル スクリーン ギャラリーに移動します。ユーザーが全画面ギャラリーで戻るボタンをクリックすると、グリッド ビューに戻ります。最後に、ユーザーがもう一度戻るボタンをクリックすると、Activity が終了します。

これは、戻るボタンを押したときにビューを切り替える方法です。アクティビティを終了する以外はうまく機能します。finish() を呼び出す行にヌル ポインター例外があります。どうすれば対処できますか?

@Override
public void onBackPressed() {

    ViewPager mPager = (ViewPager) findViewById(R.id.gallery_view);

    if(mPager.getVisibility() == View.VISIBLE){

        setContentView(R.layout.thumbnail_gallery);
        GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new GridGallery(this));

        return;

    }else {
        finish();
        return;
    }
}
4

1 に答える 1

0

やっとのことで原因がわかりましたNullPointerException。メソッドfindViewByIdが原因です。レイアウトの可視性をチェックする代わりに、ブール変数を使用してチェックしました。基本的に、コンテンツ ビューをレイアウトに設定するときにこの変数を true に割り当て、ビューを切り替えるときにブール変数も false に切り替えます。それは非常にうまく機能します。

@Override
public void onBackPressed() {

    if(isGalleryVisible) {

        setContentView(R.layout.thumbnail_gallery);
        GridView g = (GridView) findViewById(R.id.myGrid);
        g.setAdapter(new GridGallery(this));
        isGalleryVisible = false;
        return;
    } else {
        finish();
        return;
    }
}

そして、ビューを切り替える場所で、それを true に割り当てます。以下をご覧ください。

GridView g = (GridView) findViewById(R.id.myGrid);
g.setAdapter(new GridGallery(context));
isGalleryVisible = false;
g.setOnItemClickListener(new OnItemClickListener() {

  public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
     myPagerAdapter = new MyPagerAdapter(context);
     pager = (ViewPager) findViewById(R.id.gallery_view);
     pager.setAdapter(myPagerAdapter);
     pager.setCurrentItem(position);
     isGalleryVisible = true;
  }
});
于 2012-09-18T07:48:58.033 に答える