我的 findViewById 无法在 'MainActivity extends FragmentActivity' 上运行
My findViewById isn't working on 'MainActivity extends FragmentActivity'
我的意图是实现垂直滑动时的刷新。
主要是扩展一个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>
所以,我有两个问题:
- 我需要设置这个 xml 的 ContentView?
- 为什么我得到 nullPointer?
有什么问题尽管问,我有空。
谢谢。
您有 NullPointerException,因为您没有为包含 activity.
的布局文件设置内容视图
您应该 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);
我的意图是实现垂直滑动时的刷新。 主要是扩展一个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,没有编译错误,只有 运行.
上的 nullpointerExceptionswipeToRefresh = (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>
所以,我有两个问题:
- 我需要设置这个 xml 的 ContentView?
- 为什么我得到 nullPointer?
有什么问题尽管问,我有空。 谢谢。
您有 NullPointerException,因为您没有为包含 activity.
的布局文件设置内容视图您应该 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);