1

我有一个 Activity,它具有基于网格视图和全页画廊视图的两种不同布局,当用户单击网格视图中的图像时,它会进入全屏画廊。当用户在全屏图库中并单击后退按钮时,它会返回到网格视图。最后,如果用户再次单击返回按钮,我希望 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 回答