如何在Listview中使用自定义对象的属性.如果我实现了一个带有Strings列表的ArrayAdapter,它在Listview中显示得很好,但是当我使用自定义对象的列表时,它只输出内存地址.
现在的代码是:
ArrayList<CustomObject> allObjects = new ArrayList<>(); allObjects.add("title","http://url.com")); ArrayAdapter<NewsObject> adapter = new ArrayAdapter<NewsObject>(this,android.R.layout.simple_list_item_1,android.R.id.text1,allNews); // Assign adapter to ListView listView.setAdapter(adapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent,View view,int position,long id) { Uri uri = Uri.parse( "http://www.google.com" ); startActivity(new Intent(Intent.ACTION_VIEW,uri)); } });
解决方法
ArrayAdapter显示由toString()方法返回的值,因此您需要在自定义Object类中重写此方法以返回所需的String.您还需要为URL至少拥有一个getter方法,因此您可以在点击事件中检索该方法.
public class NewsObject { private String title; private String url; public NewsObject(String title,String url) { this.title = title; this.url = url; } public String getUrl() { return url; } @Override public String toString() { return title; } ... }
在onItemClick()方法中,position将是您单击的列表项对应的自定义对象的ArrayList中的索引.检索URL,解析它,并调用startActivity().
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent,long id) { NewsObject item = allNews.get(position); String url = item.getUrl(); Uri uri = Uri.parse(url); startActivity(new Intent(Intent.ACTION_VIEW,uri)); } });
请注意,我认为您的自定义类是NewsObject,因为这是适配器示例使用的.