第二个TextView显示NullPointerException



我试图使自定义ListView项目包含一个图像和两个textviews。它们应该水平排列(并排显示)。然而,第二个TextView总是显示为空,并导致setText方法崩溃。我不知道为什么它是空的,即使我已经设置了它,所以任何帮助将是伟大的。我100%确定崩溃是NullpointerException,正如日志显示的那样。

抱歉,如果我在我的代码不正常,因为我刚刚开始与Android开发。

这是我的ListView项目的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ImageView
        android:layout_width="250dp"
        android:layout_height="250dp"
        android:id="@+id/category"
        android:paddingBottom="5dp"
        android:paddingLeft="10dp"
        android:paddingTop="5dp"
        android:paddingRight="10dp"/>
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/message"
            android:layout_width="10dp"
            android:layout_height="wrap_content"
            android:textSize="19sp"
            android:textColor="#000000"
            android:textAlignment="center"
            android:gravity="left|center_horizontal"/>
        <TextView
            android:id="@+id/datetext"
            android:layout_width="40dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="30dp"
            android:layout_toRightOf="@+id/message"
            android:textSize="19sp"
            android:textColor="#000000"
            android:textAlignment="center"
            android:gravity="center_vertical|right"/>
    </RelativeLayout>
</LinearLayout>

这是我的getView方法在我的BaseAdapter类中

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.custom_list_item, null);
        }
        TextView txtAlert = (TextView) view.findViewById(R.id.message);
        // This is showing up as NULL
        TextView txtDate = (TextView) view.findViewById(R.id.datetext);
        ImageView imgCategory = (ImageView) view.findViewById(R.id.category);
        // alert is a String
        txtAlert.setText(alert);  
        // date is a String; crashes here
        txtDate.setText(date);
        return view;
    }

谢谢!

编辑:如果人们还在看这篇文章,这里是来自logcat的堆栈跟踪。此外,有趣的是,我添加的任何其他TextView对象也将导致null。我也试过多次清理和重建项目,唉,这也不起作用。

08-31 05:32:19.695  24080-24080/com.ryan.myapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
        at com.ryan.myapp.activity.NotificationsActivity$DataAdapter.getView(NotificationsActivity.java:305)
        at android.widget.AbsListView.obtainView(AbsListView.java:2604)
        at android.widget.ListView.measureHeightOfChildren(ListView.java:1253)
        at android.widget.ListView.onMeasure(ListView.java:1165)
        at android.view.View.measure(View.java:16515)
        at android.widget.RelativeLayout.measureChild(RelativeLayout.java:666)
        at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:477)
        at android.view.View.measure(View.java:16515)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at android.view.View.measure(View.java:16515)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:720)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:592)
        at android.view.View.measure(View.java:16515)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5055)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
        at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2561)
        at android.view.View.measure(View.java:16515)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2194)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1339)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1550)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1236)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5160)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
        at android.view.Choreographer.doCallbacks(Choreographer.java:591)
        at android.view.Choreographer.doFrame(Choreographer.java:561)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:5365)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
        at dalvik.system.NativeStart.main(Native Method)

我唯一能想到的是你实际上没有使用这个xml,你能检查一下吗?如果你有多个布局文件夹(不同的尺寸)也勾选

尝试替换:

view = inflater.inflate(R.layout.custom_list_item, null);

view = inflater.inflate(R.layout.custom_list_item, parent, false);

没有必要做

View view = convertView; 

下一步> view holder pattern:)

谢谢大家的帮助!事实证明评论区的gmetax是对的。由于某种原因,它的id名和我给它的不一样。它将id的名称显示为date,尽管我将其设置为datettext。如果有人能给我一个解释为什么会发生这种情况,那就太好了,这样以后就不会发生这种情况了。谢谢!

相关内容

最新更新