自定义listView android失败



所以我创建了一个列表视图,称之为"邻域"。它应该显示房屋名称、号码和密码的列表。为此,我制作了一个具有3个文本视图的布局。CustomAdapter类获得的三个列表来自SQL,它是有效的(我调试了它,它得到了3个完整的列表(

编辑:现在它只是失败了,它给了我这个错误。我已经将代码更改为建议的答案,它修复了的最后一个问题

列表:

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

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

这是适配器帮助程序类:

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个文本视图:

<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/AndroidRuntime:致命异常:main流程:com.example.omer.deliverypasss,PID:17510java.lang.NullPointerException:尝试对null对象引用调用虚拟方法"int android.view.view.getImportantForAccessibility(("在android.widget.AbsListView.gautainView(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(ActionBarOverlaylayLayout.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.Cchoreographer$CallbackRecord.run(Choreographer.java:858(在android.view.Cchoreographer.doCallbacks(Choreographer.java:670(位于android.view.Cchoreographer.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(ActivityThreads.java:5417(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:616(

非常感谢

首先将listview高度更改为wrap_content,如下

<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

然后适配器应该更新为:

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;
}
}

希望这会有所帮助。

您犯了一个愚蠢的错误,这就是您无法获取视图的原因。更改以下方法

@Override
public int getCount() {
return <HERE YOU HAVE TO GIVE SIZE>;
// like return houseList.size();
}
@Override
public Object getItem(int position) {
return <HERE YOU HAVE TO GIVE POSITION TO GET ITEM>;
// like return houseList.get(position);
}
@Override
public long getItemId(int position) {
return <HERE YOU HAVE TO PASS POSITION ONLY>;
// like return position;
}

和你的错误解决。

最新更新