完成Android中的活动时出现空指针异常

时间:2012-05-22 07:43:25

标签: android nullpointerexception android-activity

我有一个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;
    }
}

1 个答案:

答案 0 :(得分: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;
  }
});