android - 使ListView项在浏览器中打开一个URL?

时间:2016-02-10 19:17:58

标签: java android listview rss

我正按照此站点的示例构建RSS提要阅读器:

https://www.androidpit.com/java-guide-2-program-your-own-rss-reader

目前,当您点击Feed标题时,没有任何反应。我想要它做的是在浏览器中打开相应的链接,但我无法弄明白。

我试过这个:

private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException {
            String result = null;
            parser.require(XmlPullParser.START_TAG, null, "item");
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if (name.equals("title")) {
                    result = readTitle(parser);                 
                } else {
                    skip(parser);
                }
            } 
            return result;
        }

        // Processes link tags in the feed.
        private List<String> readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
            ArrayList<String> link = new ArrayList<>();
            parser.require(XmlPullParser.START_TAG, null, "link");
            link.add(readText(parser));
            parser.require(XmlPullParser.END_TAG, null, "link");
            return link;
        }

        // Processes title tags in the feed.
        private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
            parser.require(XmlPullParser.START_TAG, null, "title");
            String title = readText(parser);
            parser.require(XmlPullParser.END_TAG, null, "title");
            return title;
        }

我最后发出一条警告,说明方法readLink从未在本地使用过。我不确定是否应该更改readItem方法,因为有一个readChannel方法需要返回的值是一个字符串。

当我使用Toast的public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); ... }时,我能够看到被点击的项目的位置,但是当我使用它时,应用程序崩溃了。

        Uri uri = Uri.parse(link.get(position));
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);

所以我的问题是:如何打开浏览器进入相应的标题链接?我是java和android开发的新手,所以请耐心等待。

P.S我已将ListView设置为可点击。

1 个答案:

答案 0 :(得分:1)

右。我已经弄清楚了所以我想我会在这里分享它,以防万一有人在寻找同样的东西。

我必须在private ArrayList<String> links = new ArrayList<>();类中添加PlaceholderFragment

public static class PlaceholderFragment extends ListFragment {
     private ArrayList<String> links = new ArrayList<>();
    ...
}

readItem方法进行以下更改:

if (name.equals("title")) {
    result = readTitle(parser);                 
} else if (name.equals("link")) {
    links.add(readLink(parser));
} else {
    skip(parser);
}

添加:

        // Processes link tags in the feed.
        private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
            parser.require(XmlPullParser.START_TAG, null, "link");
            String link = readText(parser);
            parser.require(XmlPullParser.END_TAG, null, "link");
            return link;
        }

然后添加:

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);

        Uri uri = Uri.parse(links.get(position));
        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(intent);
    }

希望这有助于某人。