gpt4 book ai didi

android - 空指针异常 - findViewById()

转载 作者:行者123 更新时间:2023-12-01 18:20:36 55 4
gpt4 key购买 nike

谁能帮我找出这个程序的问题所在。在 onCreate() 方法中,findViewById() 为所有 id 返回 null,这会导致稍后出现空指针异常。我不明白为什么 findViewById() 找不到 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);
}
}
}

以及相关的 XML 文件:

activity_main布局:

<?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 布局:

<?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 布局:

 <?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>

还有activity_third布局:

<?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() 如果 View 存在于您在 setContentView() 中提供的布局中,则返回该 View,否则返回 null,这就是您所发生的情况。请注意,如果您没有 setContentView(),并且没有可用于 findViewById() 的有效 View ,findViewById() 将会始终返回 null,直到调用 setContentView()

这也意味着顶级中的变量会触发 NPE,因为它们在 onCreate() 之前调用,并且通过扩展,在 setContentView() 之前调用。另请参阅the activity lifecycle

例如,如果您setContentView(R.layout.activity_first);然后调用findViewById(R.id.first_View);它将返回一个View,它是您的布局.

但是如果你在setContentView()之前调用findViewById(R.id.second_View);,它将返回null,因为没有activity_first.xml 布局中名为 @+id/second_View 的 View 。

关于android - 空指针异常 - findViewById(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60299005/

55 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com