java - 将列表视图滚动到新添加项目的位置
问题描述
我有一个带有列表视图的自定义适配器。我从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();
是否可以在不单击列表视图中的项目的情况下将项目定位?任何想法的人。
解决方案
要实现该行为,您需要添加一个属性以自动滚动列表视图。
android:transcriptMode="alwaysScroll"
您只需调用 notifyDataSetChanged() ,您的列表就会自动滚动。
推荐阅读
- ios - 将 NSString 值转换为日期返回 nil
- node.js - 以正确的方式返回 404 代码而不是空数组
- python - pandas.read_excel() 在 strangley 格式的 excel 表上
- unity3d - Trail Render 在游戏过程中不可见
- multithreading - 火花多线程共享数据帧
- ms-access - 访问 VBA 宏以运行通过查询
- amazon-dynamodb - DynamoDB 表/索引建模 + 查询
- apache-spark - 如何管理 Spark 作业中的打印输出?
- javascript - 剪贴板链接作为代码/文本而不是链接粘贴到所见即所得
- android - 插入 MySQL 数据库不起作用