如何在自定义对象的android中使用ArrayAdapter

如何在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));
            }
        });

一个类似的问题here,但这不是我需要的,因为我只需要在列表视图中的标题显示,当他们点击提取的URL.

解决方法

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,因为这是适配器示例使用的.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...