我的findViewById无法正常工作'MainActivity extends FragmentActivity'

时间:2015-07-29 18:45:12

标签: android xml nullpointerexception fragment findviewbyid

我的目的是在垂直滑动时实现刷新。 主要是扩展FragmentActivty:

public class MainActivity extends FragmentActivity implements View.OnClickListener {

我也在创建一个CustomViewPager,在oncreate中:

private SwipeRefreshLayout swipeToRefresh;    
protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            context = this.getApplicationContext();     
            pager = new CustomViewPager(this, null);
            pager.setId(R.id.pager);
            pager.setPagingEnabled(false);
            setContentView(pager);

寻呼机是我在互联网上找到的一个例子。

正如你所看到的,我正在宣布一个SwipeRefreshLayout,我不能在没有得到null的情况下调用findViewById。我已经检查了我的xml,没有编译错误,运行时只有nullpointerException。

swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);
        swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {

我看到很少有关于它的话题,它们与我的观点非常接近,但它仍然没有用。 这是xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/activity_main_swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

所以,我有两个问题:

  1. 我需要这个xml的setContentView吗?
  2. 为什么我要获得nullPointer?
  3. 任何问题只是问,我有空。 感谢。

1 个答案:

答案 0 :(得分:1)

您有NullPointerException,因为您没有为包含您的活动的布局文件设置内容视图。

您应该在setContentView(R.layout.activity_main)

之后super.onCreate(savedInstanceState)(或您拥有的任何布局文件名)

所以这段代码

private SwipeRefreshLayout swipeToRefresh;    
protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            context = this.getApplicationContext();     
            pager = new CustomViewPager(this, null);
            pager.setId(R.id.pager);
            pager.setPagingEnabled(false);
            setContentView(pager);

应该是这样的:

private SwipeRefreshLayout swipeToRefresh;    
    protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                setContentView(R.layout.activity_main)

                context = this.getApplicationContext();     
                pager = new CustomViewPager(this, null);
                pager.setId(R.id.pager)
                pager.setPagingEnabled(false);