首页 > 解决方案 > 将列表视图滚动到新添加项目的位置

问题描述

我有一个带有列表视图的自定义适配器。我从SQL Server查询项目并使用我的列表视图将它们显示为列表。我在列表视图中有项目单击侦听器,以便获取项目位置。

  public void getData() {
    String query = "SELECT * FROM Table";
    List<Map<String, String>> data = new ArrayList<>();
    data = filterData(query);
    adapter = new ContactListAdapter(this, data, R.layout.items, from, to);
    listView.setAdapter(adapter);
    listView.invalidateViews();


    listView.setOnItemClickListener((adapterView, view, i, l) -> {
        HashMap<String, String> retreive = (HashMap<String, String>) adapterView.getAdapter().getItem(i);
        callerID = retreive.get("CallerDetailID");
        .
        .
    });
}

我使用哈希映射字符串将值存储在列表中,如下所示。

// filter the contact details from sql server
List<Map<String, String>> filterData(String query) {
    List<Map<String, String>> contact_details = new ArrayList<>();
    try {
        connect = connectionClass.CONN();  // Connect to database
        Statement stmt = connect.createStatement();
        ResultSet rs = stmt.executeQuery(query);
        while (rs.next()) {
            Map<String, String> datanum = new HashMap<>();
            datanum.put("CallerDetailID", rs.getString("CallerID"));
            .
            .
            .
            contact_details.add(datanum);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return contact_details;
}

我知道我可以通过单击将物品放到该位置(因为我已经使用了setOnItemClickListener)。但我的问题是如何在不单击该项目的情况下滚动到列表视图中新添加项目的位置?

获得项目的位置后,我可以在列表视图中使用以下方法之一进行滚动。

    listView.smoothScrollToPosition();
    listView.smoothScrollToPosition();
    listView.smoothScrollToPositionFromTop();

是否可以在不单击列表视图中的项目的情况下将项目定位?任何想法的人。

标签: javaandroidandroid-listview

解决方案


要实现该行为,您需要添加一个属性以自动滚动列表视图

android:transcriptMode="alwaysScroll"

您只需调用 notifyDataSetChanged() ,您的列表就会自动滚动。


推荐阅读