cantona_7
cantona_7

Reputation: 1177

Scrolling the listview to position of the newly added item

I have a custom adapter with a listview. I query the items from SQL Server and display them as a list using my listview. I have item click listener on my list view in order to get the item position.

  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");
        .
        .
    });
}

I store the values using hashmap strings in a list as follows.

// 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;
}

I am aware that I can get the items to the position by clicking on it (since I already use setOnItemClickListener). But my question here is how can I scroll to the newly added item's position in my list view, without clicking the item?

Once I get the position of the item, I can use one of the following methods in the listview to scroll.

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

Is it possible to get the item's to position without clicking on the item in the listview? Any ideas folks.

Upvotes: 0

Views: 580

Answers (1)

Abdul Waheed
Abdul Waheed

Reputation: 4678

To achieve the behaviour you need to add a property to scroll listview automatically.

android:transcriptMode="alwaysScroll"

You just have to call notifyDataSetChanged() and your list will be auto scrolled.

Upvotes: 2

Related Questions