2

我有一个 ListView,它应该填充对象的 ArrayList。

ArrayList<BrowserClass> playListArr = new ArrayList<BrowserClass>();

这是浏览器类:

public class BrowserClass{
    String musicName = null;
    int musicId = 0;

    BrowserClass(String Name, int Id)
    {
        musicName = Name;
        musicId = Id;
    }

    public String getName()
    {
        return musicName;
    }

    public int getId()
    {
        return musicId;
    }

}

为了填充 ListView 我正在使用以下代码:

ArrayAdapter<BrowserClass> plAdapter = new ArrayAdapter<BrowserClass>(this, android.R.layout.simple_list_item_1, playListArr);
myListView.setAdapter(plAdapter);

但是 listView 显示了一些垃圾值。我只需要显示名称(浏览器类中的getname())。我可以使用自定义列表视图、BaseAdapter 来实现这一点。但我想在不使用 BaseAdapter 的情况下实现它。

4

4 回答 4

3

像这样 :

产品.java

public class Product {
private int id;
private String name;
private double price;

public Product(){
    super();
}

public Product(int id, String name, double price) {
    super();
    this.id = id;
    this.name = name;
    this.price = price;
}

@Override
public String toString() {
    return this.id + ". " + this.name + " [$" + this.price + "]";
}
}

主要活动

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    ListView listView1 = (ListView) findViewById(R.id.listView1);

    Product[] items = { 
        new Product(1, "Milk", 21.50), 
        new Product(2, "Butter", 15.99), 
        new Product(3, "Yogurt", 14.90), 
        new Product(4, "Toothpaste", 7.99), 
        new Product(5, "Ice Cream", 10.00), 
    };

    ArrayAdapter<Product> adapter = new ArrayAdapter<Product>(this,
                android.R.layout.simple_list_item_1, items);

    listView1.setAdapter(adapter);
}
}
于 2012-09-05T07:08:11.567 回答
0

如果您希望适配器按原样工作,您应该覆盖 BrowserClass 类中的 toString() 方法。适配器将使用它来填充列表视图,并且默认的 toString() 方法使用对象的内存位置。

toString()方法是存在于所有 Java 对象中的通用方法。ArrayAdapter 的默认行为是在一行文本中显示对象。将对象转换为文本的通用方法是 toString 方法。默认情况下,这会返回类似“MyClass@0x1D2EF5512”(内存中对象的类名和位置)的内容。

当重写 toString() 方法时,你告诉 java 你的对象如何显示为字符串。

于 2012-09-05T07:09:10.067 回答
0

您不能ArrayList用于适配器构造函数。首先,您需要将 ArrayList 项复制到数组,然后将这个新创建的数组传递给 Adapter 构造函数。

如何将 ArrayList 项复制到 Array

ArrayList.toArray(Array);

然后使用 Array 作为适配器构造函数。

希望你明白我想解释什么。

于 2012-10-04T10:54:02.173 回答
0

这是一个使用简单列表的示例:

Class File:

    public class Name{
        public Integer id;
        public String text;

        public Name() {
        }

        public Name(int id, String text) {
            this.id = id;
            this.text = text;
        }

        public String toString() 
        {
            return this.text;
        }
    }


Activity File:


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView1 = (ListView)findViewById(R.id.listview1);
        editsearch = (SearchView) findViewById(R.id.search1);

        editsearch.setOnQueryTextListener(this);

        List<Name> list = new List<Name>();
        list.add(new Name(1, "a1"));
        list.add(new Name(2, "a2"));
        list.add(new Name(3, "a3"));


        ArrayAdapter<Name> adapter = new ArrayAdapter<Name>(this,
                android.R.layout.simple_list_item_1, list );

        listView1.setAdapter(adapter);
    }
于 2017-11-20T21:30:11.557 回答