微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在自定义对象的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,因为这是适配器示例使用的.

原文地址:https://www.jb51.cc/android/310665.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐