【发布时间】:2021-02-08 17:18:09
【问题描述】:
我有一个带有列表视图的自定义适配器。我从 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");
.
.
});
}
我使用 hashmap 字符串将值存储在一个列表中,如下所示。
// 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();
是否可以在不单击列表视图中的项目的情况下将项目定位?大家有什么想法。
【问题讨论】:
-
你可以简单地做
listView.indexOf(newlyAddedItem),你会得到那个特定的项目索引,然后你可以使用listView.smoothScrollToPosition()平滑滚动] -
listView.indexOf()..,不存在?!你确定吗?
-
嘿伙计,我刚刚看到您的
listView是 RecyclerView/ListView 而data是其中使用的实际数据列表,所以它应该是data.indexOf()。请试试这个,让我知道这是否适合你。 -
@AppDev。伙计,我设法获得了最后添加的项目的索引。由于我在
ascending order中查询表格和排列数据,所以列表视图中新添加的项的定位是不同的。有什么想法吗?
标签: java android android-listview