Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7660267
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T13:26:33+00:00 2026-05-31T13:26:33+00:00

fairly new Android developer here. I’ve come across a strange problem that I’m not

  • 0

fairly new Android developer here.

I’ve come across a strange problem that I’m not sure how to work around. I’ve read a lot of problems around here that sound like they are the same problem I am having, but the solutions to their problems never seemed applicable to what is going on here.

I have a custom listView set up using a separate class that extends BaseAdapter and uses a view holder (I set this up looking at various different examples of custom listviews). It’s got a text view, a button, a progress bar, and an image button, and these items are hidden/changed based on an AsyncTask used to download a file.

Everything works fine when I scroll through the list slowly. When I scroll the list rapidly up/down, it is as if the views of some cells in the list get re-assigned to other cells.

I put this line into the top of my “getView” method in my adapter class:

    @Override
    public View getView(final int pos, View convertView, ViewGroup parent)
    {
        Log.i("ks3","getView called, position is " + pos);

I have 7 items in my list, and 6 of them fit on screen. When it first gets displayed, I see this in my log:

getView called, position is 0
getView called, position is 1
getView called, position is 2
getView called, position is 3
getView called, position is 4
getView called, position is 5

When I scroll down slowly to the next item, this is printed out next:

getView called, position is 6

When I scroll back up, this:

getView called, position is 0

Going down and up slowly produce these results flawlessly.

When I start scrolling back and forth quickly, it prints out this message a bunch of times, mostly showing 6 and 0 as the position, but occasionally I will see these as well:

getView called, position is 1
getView called, position is 5

Positions 1 and 5 should not be getting called, as they are always on-screen. It is as if getView got all jumbled up. At the same time, as I stated before, my list will look strange. Image buttons will be moved up or down a cell where they should not be.

If I go back to scrolling smoothly, I see only 0’s and 6’s for position again.

I honestly am not sure how to work around this. I thought maybe I could limit how fast you are able to scroll through the list, but haven’t been able to find anything that works.

Thanks!

Edit:
I wanted to update a couple things regarding this question. The first being that, from a comment here and from the Google video on listView, it has come to my attention that getView can be called for other things then what I imagined it was for, such as measurements, and so I should not be alarmed by what I originally thought was part of my problem (that being that I thought getView was being called with the wrong positions).

Secondly, I saw multiple times that it is a very bad idea to “cache views inside your adapter.” I am not exactly clear on what this means, but I’m pretty sure it is one of the things I am doing wrong (I save an instance of a button, progressBar, imageButton…).

That, along with the fact that I update the views outside of getView and I don’t use notifyDataSetChanged(); those together are probably causing some wonky stuff to happen.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T13:26:33+00:00Added an answer on May 31, 2026 at 1:26 pm

    You are correct that ListView is reusing views in different places on the screen. It’s an optimization to keep memory use reasonable and speedy by not allocating new views all the time.

    Chances are that you’re using LiewView incorrectly. Watch this talk on how to properly use ListView to get the whole story, but here’s the highlights:

    1. “Position” refers to the location of your data in the adapter list. If your adapter data is in an array, this would be the index into that array.
    2. “ID” refers to the value of the data itself. If you have a list of names and resort them, their position will change, but their ID will not.
    3. “Index” refers to the relative location of a view with respect to the viewable screen area. You’ll probably never need this.
    4. Do not manipulate views (or attempt to cache them) outside of your adapter’s getView() method or you will get strange behavior.
    5. If the call to getView(int, View, ViewGroup) provides a view instance, populate its fields instead of inflating totally new views. Assuming you’ve correctly implemented getItemType(), you’ll always get the right View type to repopulate.
    6. Make your getView() method as fast as you possibly can, and only do heavy lifting on other threads.
    7. Just because the container called getView() doesn’t necessarily mean the data will be displayed. The framework uses these for measurement purposes. Since the work could be thrown away, this is another reason to make sure that getView() is as fast as you can make it.
    8. When something happens to your data which you need to show on screen, say your download is complete, that’s when you call notifyDataSetChanged(). Don’t fiddle with the views directly, they’ll be populated on the next UI loop when it gets redrawn.

    Having just spent a few days reworking a ListView that was implemented naively, I feel your pain. The results have been worth it, though!

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm fairly new to developing in Android and I'm not sure how to solve
fairly new iPhone developer here. Building an app to send RS232 commands to a
I'm fairly new to Android development so I ran into a problem with the
Im fairly new to android dev and I want to build an app that
I'm fairly new to Android and have been toying around with Canvas. I'm attempting
I'm new here and a fairly newbish developer overall. I have looked online for
I'm fairly new to Android/Java and wanted to make an app that displays info
I am fairly new to android and I am creating an app that uses
I am fairly new to Android. Just getting learning the ropes and fumbling around
Ok, im fairly new to android but i have managed to teach myself the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.