ListFragment的ListView的抛出,当我用我自己的ListAdapter NullPointerException异常 [英] ListFragment's ListView throws NullPointerException when I use my own ListAdapter

查看:172
本文介绍了ListFragment的ListView的抛出,当我用我自己的ListAdapter NullPointerException异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从我的ListFragment显示数据库中的数据。要做到这一点,我都遵循同样的方式,当我使用ListActivity,创建了自己的适配器(适配器可能看起来很奇怪,我从一个扩展BaseAdapter在我的老项目之一的一类是将它转换):

I'm trying to display data from my database in a ListFragment. To do this, I have followed the same way when I use ListActivity, created my own adapter (adapter might look strange, I converted it from a class that extends BaseAdapter in one of my old projects):

package com.mysys.asistan;

import android.app.ListFragment;
import android.content.Context;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.TextView;

import com.mysys.asistan.database.Company;

public class CompanyListFragment extends ListFragment {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setListAdapter(new CompanyListAdapter(getActivity()));
    }

    private class CompanyListAdapter implements ListAdapter {

        private final Context context;
        private DatabaseHelper dbHelper;

        public CompanyListAdapter(Context context) {
            this.context = context;
            this.dbHelper = new DatabaseHelper(context);
        }

        public int getCount() {
            return dbHelper.getCompanyCount();
        }

        public Object getItem(int position) {
            return dbHelper.getAllCompanies().get(position);
        }

        public long getItemId(int position) {
            return (long) dbHelper.getAllCompanies().get(position).id;
        }

        public View getView(int position, View view, ViewGroup parent) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View row = inflater.inflate(R.layout.company_list_item, parent, false);
            Company company = (Company) getItem(position);

            TextView nameView = (TextView) row.findViewById(R.id.CompanyListName);
            TextView telephoneView = (TextView) row.findViewById(R.id.CompanyListTelephone);
            TextView addressView = (TextView) row.findViewById(R.id.CompanyListAddress);

            nameView.setText(company.name);
            telephoneView.setText(company.telephone);
            addressView.setText(company.address);

            return null;
        }

        public int getItemViewType(int position) {
            return IGNORE_ITEM_VIEW_TYPE;
        }

        public int getViewTypeCount() {
            return 1;
        }

        public boolean hasStableIds() {
            return true;
        }

        public boolean isEmpty() {
            return getCount() == 0 ? true : false;
        }

        public void registerDataSetObserver(DataSetObserver observer) {
            // TODO Auto-generated method stub

        }

        public void unregisterDataSetObserver(DataSetObserver observer) {
            // TODO Auto-generated method stub

        }

        public boolean areAllItemsEnabled() {
            return true;
        }

        public boolean isEnabled(int position) {
            return true;
        }

    }
}

然而,这会导致一个NullPointerException异常,我无法弄清楚从LogCat中日志什么,没有涉及到我的code:

However, that leads to a NullPointerException and I couldn't figure anything from the logs in LogCat, nothing related to my code:

01-24 20:24:06.040: E/AndroidRuntime(8731): FATAL EXCEPTION: main
01-24 20:24:06.040: E/AndroidRuntime(8731): java.lang.NullPointerException
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.ListView.measureScrapChild(ListView.java:1181)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1264)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.ListView.onMeasure(ListView.java:1173)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1284)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:956)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:521)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:764)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:519)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4353)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:267)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2042)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.View.measure(View.java:10848)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewRoot.performTraversals(ViewRoot.java:941)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.view.ViewRoot.handleMessage(ViewRoot.java:2063)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.os.Looper.loop(Looper.java:132)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at android.app.ActivityThread.main(ActivityThread.java:4126)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at java.lang.reflect.Method.invoke(Method.java:491)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
01-24 20:24:06.040: E/AndroidRuntime(8731):     at dalvik.system.NativeStart.main(Native Method)

这是包含片段的布局:

And this is the layout which contains the fragment:

<?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:orientation="horizontal" >

    <fragment
        android:id="@+id/fragment1"
        android:name="com.mysys.asistan.CompanyListFragment"
        android:layout_width="@dimen/company_listfragment_width"
        android:layout_height="wrap_content" />

</LinearLayout>

这是company_list_item.xml:

And this is company_list_item.xml:

<?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:orientation="vertical" >

    <TextView android:id="@+id/CompanyListName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/CompanyListAddress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView android:id="@+id/CompanyListTelephone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

我发现<一href="http://stackoverflow.com/questions/4739125/android-extra-weird-uncaught-exception-on-a-basic-activity">this的问题,但解决方案是不是与我的问题,我认为。在此先感谢您的帮助。

I found this question, but solution is not something related to my problem I think. Thanks in advance for your help.

推荐答案

您应该返回从getview()函数的观点。您正在返回空。

You should return the view from getview() function. You are returning "Null".

        public View getView(int position, View view, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.company_list_item, parent, false);
        Company company = (Company) getItem(position);

        TextView nameView = (TextView) row.findViewById(R.id.CompanyListName);
        TextView telephoneView = (TextView) row.findViewById(R.id.CompanyListTelephone);
        TextView addressView = (TextView) row.findViewById(R.id.CompanyListAddress);

        nameView.setText(company.name);
        telephoneView.setText(company.telephone);
        addressView.setText(company.address);

        return row;//changed from null
    }

注:使用可回收的观点和持有者,使列表视图滚动流畅。对于理解尤为明显阅读本教程

这篇关于ListFragment的ListView的抛出,当我用我自己的ListAdapter NullPointerException异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆