Android - Null pointer Exception - findViewById()

2014-12-25 10:04:15     人阅读    

 

我的代码一直报错误,空指针异常 nullpointer exception ,问题出在调用 findViewById 的返回值上面......调试了好长时间,不知道为啥出现..本人是android新手,对android开发机制不是很了解

问题出在  下面代码中

  

  layout1 = (LinearLayout) findViewById(R.id.first_View);
    layout2 = (LinearLayout) findViewById(R.id.second_View);
    layout3 = (LinearLayout) findViewById(R.id.third_View);


这几行,是不是少配置了什么东西?还是少设置了什么?

 

我的代码如下

public class MainActivity extends Activity {

ViewPager pager;
MyPagerAdapter adapter;
LinearLayout layout1, layout2, layout3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    layout1 = (LinearLayout) findViewById(R.id.first_View);
    layout2 = (LinearLayout) findViewById(R.id.second_View);
    layout3 = (LinearLayout) findViewById(R.id.third_View);

    adapter = new MyPagerAdapter();
    pager = (ViewPager) findViewById(R.id.main_pager);
    pager.setAdapter(adapter);
}

private class MyPagerAdapter extends PagerAdapter
{

    @Override
    public int getCount() {
        return 3;
    }

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

        LinearLayout l = null;

        if (position == 0 )
        {
            l = layout1;
        }
        if (position == 1)
        {
            l = layout2;
        }

        if (position == 2)
        {
            l = layout3;
        }
            collection.addView(l, position);
            return l;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view==object);
    }

     @Override
     public void destroyItem(ViewGroup collection, int position, Object view) {
             collection.removeView((View) view);
     }
}

}


我的 activity_main 布局文件如下
activity_main layout :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#a4c639">


    <android.support.v4.view.ViewPager
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:id="@+id/main_pager"/>
</LinearLayout>

activity_first layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/first_View">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

<Button
    android:id="@+id/button1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button" />

</LinearLayout>

activity_second layout :

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/second_View">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

</LinearLayout>
and the activity_third layout :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/third_View">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

</LinearLayout>

上面是我的错误代码和配置问题,最好能指出来具体如何出错的,如果能给我讲解一下findViewById 的运行原理就更好了.

处理方法

findViewById()  返回的view视图是需要你通过 setContentView() 进行设置的,
举个简单例子:
如果你设置了  setContentView(R.layout.activity_first); 然后调用 findViewById(R.id.first_View); 它将返回你设置的视图,但是如果你
findViewById(R.id.second_View); 它将返回null,因为在你的 'activity_first' 布局中并没有叫  'second_View' 的视图
明白了吧?


原文地址:http://www.itmmd.com/201412/376.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

Android 为 ListView Item 自定义row   上一篇
下一篇  andorid 如何连接Mysql数据库?
精彩回复
我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!