ViewPager访问膨胀的视图项

时间:2012-03-20 08:28:44

标签: android

我正在尝试实现ViewPager以在一个活动中组合两个视图,当我尝试在膨胀视图中使用findViewById访问项目时我面临NullPointerException,我的自定义页面适配器如下,

public class CustomPagerAdapter extends PagerAdapter {

  @Override
  public int getCount() {

     return 2;
  }

  @Override
  public boolean isViewFromObject(View view, Object object) {

     return view == ((View) object);
  }

  @Override
  public void destroyItem(View view, int value, Object object) {

     ((ViewPager) view).removeView((View) object);
  }

  @Override
  public Parcelable saveState() {

     return null;
  }

  @Override
  public Object instantiateItem(View collection, int position) {

     LayoutInflater layoutInflater = (LayoutInflater) collection.getContext()
           .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

     int resultId = 0;         
     switch (position) {

        case 1:
           resultId = R.layout.layout2;
           break;

        case 0:
        default:
           resultId = R.layout.layout1;
           break;
     }
     View view = layoutInflater.inflate(resultId, null);
     ((ViewPager) collection).addView(view, 0);

     return view;
  }

}

我的活动如下,其中我正在尝试访问layout1内部的按钮,该按钮抛出空值。

   public class PageSwiperActivity extends Activity {

   @Override
   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);
      setContentView(R.layout.viewpagerlayout);

      Button myButton=(Button) findViewById(R.id.myButton);
   }
}

我的viewpagerlayout.xml仅包含

<android.support.v4.view.ViewPager
    android:id="@+id/viewPagerLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

我的layout1.xml包含一个按钮。给我一些指导。

感谢。

2 个答案:

答案 0 :(得分:4)

您是否已将PageAdapter设为ViewPager? 如果您未设置它,请删除包含按钮的行并将此代码添加到您的活动中:

final ViewPager viewPager = (ViewPager) findViewById(R.id.viewPagerLayout);
viewPager.setAdapter(new CustomPagerAdapter());

而不是

Button myButton = (Button) findViewById(R.id.myButton);

您可以拨打findViewById来获取适配器的此方法中的按钮:

@Override
public Object instantiateItem(View collection, int position) {
    ... // your previous code
    final Button myButton = (Button) findViewById(R.id.myButton);

    return view;
}

填充包含此按钮的布局后。

答案 1 :(得分:1)

setContentView(R.layout.viewpagerlayout);之后

您正在使用

直接

Button myButton=(Button) findViewById(R.id.myButton);

但实际上 viewpagerlayout 没有ID myButton 的任何视图。

这样你就会得到 NULL指针异常。在使用 findViewById 之前,您必须向ViewPager布局添加视图。

在您发布的代码中,您似乎在添加,但必须在 setContentView 之后使用它。