我的 findViewById 不适用于“MainActivity 扩展 FragmentActivity”

Posted

技术标签:

【中文标题】我的 findViewById 不适用于“MainActivity 扩展 FragmentActivity”【英文标题】:My findViewById isn't working on 'MainActivity extends FragmentActivity' 【发布时间】:2015-10-20 22:04:41 【问题描述】:

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

public class MainActivity extends FragmentActivity implements View.OnClickListener 

我也在 oncreate 内部创建一个 CustomViewPager:

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);

这个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_
    android:layout_
    android:orientation="vertical" >

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/activity_main_swipe_refresh_layout"
        android:layout_
        android:layout_ >

        <ListView
            android:id="@android:id/list"
            android:layout_
            android:layout_ />
    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

所以,我有两个问题:

    我需要设置这个xml的内容视图吗? 为什么我得到 nullPointer?

任何问题都可以问,我有空。 谢谢。

【问题讨论】:

(1) 是,(2) 因为(1) 在 onCreate 中你似乎是setContentView(pager),这意味着你的活动将只显示pager。如果要显示 xml 中的布局,则需要 setContentView(R.layout.whatever_your_layout_is)。 Marcus 已经回答了您提出的问题。 【参考方案1】:

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

您应该在super.onCreate(savedInstanceState) 之后紧跟setContentView(R.layout.activity_main)(或您拥有的任何布局文件名)

所以这段代码

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);

【讨论】:

谢谢大家和伊万,就是这样。起初我认为“寻呼机”是我想要的布局,但不,现在很清楚。

以上是关于我的 findViewById 不适用于“MainActivity 扩展 FragmentActivity”的主要内容,如果未能解决你的问题,请参考以下文章

saveWebArchive() 不适用于 Android 4.0.3

媒体控制器不适用于 Android 中的 VideoView

级联样式表不适用于角度Js

Android VideoView 不适用于在线视频流

融合样式不适用于 QTabWidget 中的 QTextBrowser

.contains() 是不是有理由不适用于扫描仪?