android - getActivity().findViewById(R.layout.contacts_list_view) 返回 null

标签 android android-listview android-fragments nullpointerexception findviewbyid

我看到过一些类似的问题,但这都是出于不同的原因(我认为)。 我使用的代码取自 http://developer.android.com/training . 我正在尝试根据教程构建一个简单的联系人应用程序: http://developer.android.com/training/contacts-provider/retrieve-names.html 我遇到错误的部分是为 ListView 设置 CursorAdapter。 这是我的代码:

@Override
    public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);
        mCursorAdapter = new SimpleCursorAdapter(getActivity(), 
                R.layout.contacts_list_item, null, FROM_COLUMNS, TO_COLUMN, 0);
        mContactsList.setAdapter(mCursorAdapter);
        mContactsList.setOnItemClickListener(this);
        getLoaderManager().initLoader(0, null, this);
    }

所有 XML 文件都已就位:

contact_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@android:id/text1"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:clickable="true"/>

contact_list_view.xml:

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

我的主要 Activity 由 2 个 FrameLayout 组成,用于放置 fragment 。这是 XML:

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

    <FrameLayout
        android:id="@+id/frag_contacts"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:textColor="#0a20a3" >
    </FrameLayout>

    <FrameLayout 
        android:id="@+id/frag_contact_details"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textColor="#045011" />

</LinearLayout>

这是 Activity 的onCreate:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ninth);
        if (findViewById(R.id.frag_contacts) != null)
        {
            if (savedInstanceState != null)
                return;
            ContactsFragment contactsFrag = new ContactsFragment();
            getFragmentManager().beginTransaction().add(R.id.frag_contacts, contactsFrag).commit();
        }
    }

此外,这是 fragment 的onCreateView:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.contacts_list_view, container, false);
    }

现在,很抱歉这篇文章很长,其中一些可能是不必要的,但问题是在第一个 fragment 中,getActivity().findViewById(R.layout.contacts_list_view) 全部返回 null时间! 不知道还能做什么。我还能如何将数据加载到列表中,这里有什么问题? 提前致谢!

最佳答案

你必须改变

mContactsList = (ListView) getActivity().findViewById(R.layout.contacts_list_view);

mContactsList = (ListView) getView().findViewById(R.id.contacts_list_view);

因为 ListView 属于您在 onCreateView 中返回的 View 。

关于android - getActivity().findViewById(R.layout.contacts_list_view) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522554/

相关文章:

android - ListView 中的第一项在 Android 中无法正常工作

android - 以Listview为item的Listview,内部listview不完全可见

java - 当activity中的asynctask完成时如何重新加载fragment中的ui?

android - 使用 WiFI 从笔记本电脑通过 Web 浏览器管理 Android 设备

android - 使用 Intent 打开特定文件夹

android - 在模块 classes.jar (androidx.core :core:1. 0.0) 和 classes.jar (com.android.support :support-compat:28. 0.0) 中找到

java - 使用自己的类膨胀类 <unknown> 时出错

android - 控制 ListActivity 中的各个 View

android - 如何在Android fragment中完美显示软键盘?

java - 如何更改以不同显示尺寸显示 fragment 的方式?