安卓自定义ArrayAdapter在列表视图中无法显示数据

3

我希望有一个高分页面。我为布局创建了一个row.xml,并制作了自定义ArrayAdapter。当我打印出我的对象时,我得到了正确的信息,但它并没有显示在我的列表视图中。什么也没有显示。

以下是我的row.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="horizontal" >


    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/txtNumber"
        android:layout_weight="1"
        android:layout_gravity="center_horizontal"
        android:text="@string/txtNumber" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/txtName"
        android:id="@+id/txtName"
        android:layout_gravity="top|bottom"
        android:layout_weight="1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/txtScore"
        android:id="@+id/txtScore"
        android:layout_weight="1" />


</LinearLayout>

我自定义的ArrayAdapter

Package be.ehb.dt.multiscreen_highscores;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.ArrayList;

// ** * Created by Naomi on 17/12/15. */

public  class PersonAdapter extends ArrayAdapter<Person> {

    public PersonAdapter(Context context, ArrayList<Person> personen) {
        super(context,0, personen);
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        Person person = getItem(position);
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.row, parent, false);
        }

        TextView txtNumber = (TextView) convertView.findViewById(R.id.txtNumber);
        TextView txtName = (TextView) convertView.findViewById(R.id.txtName);
        TextView txtScore = (TextView) convertView.findViewById(R.id.txtScore);

        txtNumber.setText(""+person.number);
        txtName.setText(person.name);
        txtScore.setText(""+person.score);
    return convertView;
    }
}

我的主要活动

package be.ehb.dt.multiscreen_highscores;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.util.Log;
import android.widget.ListView;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity{
    private ArrayList<Person> personen;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<Person> arrayOfPersons = new ArrayList<Person>();
        PersonAdapter adapter = new PersonAdapter(this,arrayOfPersons);
        ListView v = (ListView) findViewById(R.id.listHighscores);


        personen=new ArrayList<>();
        personen.add(new Person(1,"Naomi",3454));
        personen.add(new Person(2,"Steven",2394));
        personen.add(new Person(3, "Lieven", 2254));
        Log.d("print",personen.get(1).toString());
        v.setAdapter(adapter);

    }

}

当使用POJO来保存数据时,可以使用BaseAdapter。 - Yogesh Seralia
@YogeshSeralia 为什么?为什么不能使用数组适配器? - Piyush
@PiyushGupta 我没有看到getCount方法在哪里被使用?我对Android非常陌生。 - Naomi DL
在适配器类中,这是一个重写方法。只需复制粘贴我的代码即可。 - Piyush
你的arrayOfPersons是一个空数组。因此,很明显你的listview也是空白的。 - xxxzhi
显示剩余4条评论
1个回答

4
您应该修改适配器代码,如下所示:
ArrayList<Person> personen;
public class PersonAdapter extends ArrayAdapter<Person> {

public PersonAdapter(Context context, ArrayList<Person> personen) {
    super(context,0, personen);
    this.personen = personen;

}

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

现在获取这里的 Person person = personen.get(position); < p > 编辑:

    ListView v = (ListView) findViewById(R.id.listHighscores);
    personen=new ArrayList<>();
    personen.add(new Person(1,"Naomi",3454));
    personen.add(new Person(2,"Steven",2394));
    personen.add(new Person(3, "Lieven", 2254));
    Log.d("print",personen.get(1).toString());
    PersonAdapter adapter = new PersonAdapter(this,personen)
    v.setAdapter(adapter);

1
这没有意义。看一下ArrayAdapter#getCount()方法,它已经像这样实现:return mObjects.size(),其中mObjects是您传递到适配器中的对象数组。 - aga
@aga 你在哪里看到的? - Piyush
@PiyushGupta,感谢您的评论,我注意到了我的错误。我没有使用ArrayList personen。我将其更改为: `ArrayList arrayOfPersons = new ArrayList(); PersonAdapter adapter = new PersonAdapter(this,arrayOfPersons); ListView v = (ListView) findViewById(R.id.listHighscores); adapter.add(new Person(1, "Naomi", 3454)); adapter.add(new Person(2,"Steven",2394)); adapter.add(new Person(3, "Lieven", 2254)); v.setAdapter(adapter);` - Naomi DL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接