如何将安卓App的GUI元素从TextView改为HTMLView以识别超链接
公告板展示App开发问题说明
我需要开发一款仅展示指定公告板网页内容的App,当前遇到的问题是:通过Jsoup爬取网页内容后,使用TextView展示时无法识别内容中的超链接,需要将展示用的GUI元素从TextView替换为HTMLView。
相关代码
公告板数据爬取类
public class BlackBoardClient { private static final String BLACK_BOARD_URL = "https://zpa.cs.hm.edu/public/notice_board/"; private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); public static List<BlackBoardEntry> getBlackBoardEntries() throws IOException { List<BlackBoardEntry> entries = new ArrayList<>(); Document doc = Jsoup.connect(BLACK_BOARD_URL).get(); Element newsTable = doc.getElementById("content").selectFirst("table"); Iterable<Element> rows = newsTable.selectFirst("tbody").children(); for (Element row : rows) { Iterator<Element> columns = row.children().iterator(); String author = columns.next().text(); String title = columns.next().text(); String content = columns.next().text(); LocalDate validFrom = LocalDate.parse(columns.next().text(), FORMATTER); LocalDate validUntil = LocalDate.parse(columns.next().text(), FORMATTER); BlackBoardEntry entry = new BlackBoardEntry(author, title, content, validFrom, validUntil); entries.add(entry); } return entries; } }
主页面逻辑类
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView dataList = findViewById(R.id.dataList); dataList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { BlackBoardEntry entry = (BlackBoardEntry) parent.getItemAtPosition(position); String content = entry.getContent(); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View popupView = inflater.inflate(R.layout.content_popup, null, false); ((TextView) popupView.findViewById(R.id.contentView)).setText(content); PopupWindow popup = new PopupWindow(popupView, 500, 1000, true); popup.showAtLocation(parent, Gravity.CENTER, 0, 0); } }); new Thread(new Runnable() { @Override public void run() { try { List<BlackBoardEntry> entries = BlackBoardClient.getBlackBoardEntries(); BlackBoardAdapter adapter = new BlackBoardAdapter(entries, getApplicationContext()); dataList.post(new Runnable() { @Override public void run() { dataList.setAdapter(adapter); } }); } catch (IOException e) { e.printStackTrace(); } } }).start(); } }
当前显示效果

内容的提问来源于stack exchange,提问作者Irina
相关产品推荐
相关产品推荐

