自定义listView android失败 [英] Custom listView android fails

查看:76
本文介绍了自定义listView android失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我创建了一个列表视图,称为邻居".它应该显示房屋名称,号码及其密码的列表.为此,我制作了一个具有3个textviews的布局.CustomAdapter类获得的三个列表来自SQL,该列表可以正常工作(我对其进行了调试,并获得了3个完整列表)

so I have made a List view, called it "neighborhood". it supposed to show a list of names of houses, number, and their passwords. for it, I have made a layout with 3 textviews. the three lists that CustomAdapter class gets are from SQL, which works(i debugged it and it gets 3 full lists)

现在它只是失败了,它给了我这个错误.我已将代码更改为建议的答案,并解决了最后的问题

now it just fails, and it gives me this error. I have changed the code to the suggested answers, and it fixed the last problems

列表:

<ListView
    android:id="@+id/neighborhood"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toTopOf="@+id/allAddresses"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/AddresSearch" />

这是onCreate:

this is the onCreate:

ListView neighborhood = (ListView)findViewById(R.id.neighborhood);
CustomAdapter customAdapter= new CustomAdapter(houseList,numList,passList);
neighborhood.setAdapter(customAdapter);

这是Adapter Helper类:

this is the Adapter Helper class:

   class CustomAdapter extends BaseAdapter{

    ArrayList<String> houseList ;
    ArrayList<String> numList ;
    ArrayList<String> passList ;

    public CustomAdapter(ArrayList<String>list1,ArrayList<String>list2,ArrayList<String>list3){
        this.houseList = list1;
        this.numList = list2;
        this.passList = list3;

    }

    @Override
    public int getCount() {
        return houseList.size();
    }

    @Override
    public Object getItem(int position) {
        return houseList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int i, View view, ViewGroup parent) {
        view = getLayoutInflater().inflate(R.layout.activity_pass_item_view,null);

        TextView house = (TextView) view.findViewById(R.id.house);
        TextView num = (TextView) view.findViewById(R.id.num);
        TextView pass = (TextView) view.findViewById(R.id.pass);

        house.setText(houseList.get(i).toString());
        num.setText(numList.get(i).toString());
        pass.setText(passList.get(i).toString());
        return null;
    }
}

这是列表视图的自定义布局:仅包含3个文本视图:

and this is the custom layout for the listview: contains only 3 text view:

<TextView
    android:id="@+id/num"
    android:layout_width="86dp"
    android:layout_height="45dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="28dp"
    app:layout_constraintEnd_toStartOf="@+id/house"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/house"
    android:layout_width="86dp"
    android:layout_height="45dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="32dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

<TextView
    android:id="@+id/pass"
    android:layout_width="86dp"
    android:layout_height="45dp"
    android:layout_marginTop="8dp"
    android:layout_marginEnd="32dp"
    app:layout_constraintEnd_toStartOf="@+id/num"
    app:layout_constraintTop_toTopOf="parent" />

这是现在给我的错误:

E/Android运行时:致命异常:主要流程:com.example.omer.deliverypasses,PID:17510java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'int android.view.View.getImportantForAccessibility()'在android.widget.AbsListView.obtainView(AbsListView.java:2363)在android.widget.ListView.measureHeightOfChildren(ListView.java:1280)在android.widget.ListView.onMeasure(ListView.java:1188)在android.view.View.measure(View.java:18788)在android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227)在android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572)在android.view.View.measure(View.java:18788)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)在android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)在android.view.View.measure(View.java:18788)在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)在android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:401)在android.view.View.measure(View.java:18788)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)在android.view.View.measure(View.java:18788)在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)在android.widget.LinearLayout.measureVertical(LinearLayout.java:748)在android.widget.LinearLayout.onMeasure(LinearLayout.java:630)在android.view.View.measure(View.java:18788)在 android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)在android.widget.FrameLayout.onMeasure(FrameLayout.java:194)在com.android.internal.policy.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2643)在android.view.View.measure(View.java:18788)在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)在android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)在android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)在android.view.ViewRootImpl $ TraversalRunnable.run(ViewRootImpl.java:6013)在 android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)在android.view.Choreographer.doCallbacks(Choreographer.java:670)在android.view.Choreographer.doFrame(Choreographer.java:606)在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:844)在android.os.Handler.handleCallback(Handler.java:739)在android.os.Handler.dispatchMessage(Handler.java:95)在android.os.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java:5417)在java.lang.reflect.Method.invoke(本机方法)在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.omer.deliverypasses, PID: 17510 java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility()' on a null object reference at android.widget.AbsListView.obtainView(AbsListView.java:2363) at android.widget.ListView.measureHeightOfChildren(ListView.java:1280) at android.widget.ListView.onMeasure(ListView.java:1188) at android.view.View.measure(View.java:18788) at android.support.constraint.ConstraintLayout.internalMeasureChildren(ConstraintLayout.java:1227) at android.support.constraint.ConstraintLayout.onMeasure(ConstraintLayout.java:1572) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:401) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465) at android.widget.LinearLayout.measureVertical(LinearLayout.java:748) at android.widget.LinearLayout.onMeasure(LinearLayout.java:630) at android.view.View.measure(View.java:18788) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643) at android.view.View.measure(View.java:18788) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

非常感谢

推荐答案

首先,将列表视图高度更改为 wrap_content

At first change the listview height to wrap_content like this

<ListView
    android:id="@+id/neighborhood"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="8dp"
    android:layout_marginBottom="8dp"
    app:layout_constraintBottom_toTopOf="@+id/allAddresses"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/AddresSearch" />

您已经在适配器构造函数中创建了另外3个不同的列表.父级列表始终为null.在这种情况下,该应用将崩溃.通过在列表变量之前使用 this ,无需在父列表上创建新的列表集值.

You have created another 3 different lists in the adapter constructor. The parent list always null. In this case, the app goes to crash. Without creating new list set values on parent list by using this before the list variable.

然后将适配器更新为此:

And then the adapter should be updated to this:

class CustomAdapter extends BaseAdapter{

    ArrayList<String> houseList ;
    ArrayList<String> numList ;
    ArrayList<String> passList ;

    public CustomAdapter(ArrayList<String>list1,ArrayList<String>list2,ArrayList<String>list3){
        this.houseList = list1;
        this.numList = list2;
        this.passList = list3;

    }

    @Override
    public int getCount() {
        return houseList.size();
    }
   @Override
    public long getItemId(int position) {
      return position;
     }
    @Override
    public View getView(int i, View view, ViewGroup parent) {
        view = getLayoutInflater().inflate(R.layout.activity_pass_item_view,null);

        TextView house = (TextView) view.findViewById(R.id.house);
        TextView num = (TextView) view.findViewById(R.id.num);
        TextView pass = (TextView) view.findViewById(R.id.pass);

        house.setText(houseList.get(i).toString());
        num.setText(numList.get(i).toString());
        pass.setText(passList.get(i).toString());

        return view;
    }
}

希望这会有所帮助.

这篇关于自定义listView android失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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