Note that there are some explanatory texts on larger screens.

plurals
  1. POUsing AsyncTask to load Images in ListView
    primarykey
    data
    text
    <p>I have one ListView which can hold an image. It depends if image exists or not in SDCARD.</p> <p>Here my example code:</p> <pre><code>public class MainActivity extends Activity { ListView mListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mListView = new ListView(this); setContentView(mListView); String[] arr = new String[] { "/example/images/1.jpg", "/example/images/2.jpg", "/example/images/3.jpg", "/example/images/4.jpg", "/example/images/5.jpg", "/example/images/6.jpg", "/example/images/7.jpg", "/example/images/8.jpg", "/example/images/9.jpg", "/example/images/1.jpg", "/example/images/2.jpg", "/example/images/3.jpg", "/example/images/4.jpg", "/example/images/5.jpg", "/example/images/6.jpg", "/example/images/7.jpg", "/example/images/8.jpg", "/example/images/9.jpg", "/example/images/1.jpg", "/example/images/2.jpg", "/example/images/3.jpg", "/example/images/4.jpg", "/example/images/5.jpg", "/example/images/6.jpg", "/example/images/7.jpg", "/example/images/8.jpg", "/example/images/9.jpg", "/example/images/1.jpg", "/example/images/2.jpg", "/example/images/3.jpg", "/example/images/4.jpg", "/example/images/5.jpg", "/example/images/6.jpg", "/example/images/7.jpg", "/example/images/8.jpg", "/example/images/9.jpg"}; List&lt;String&gt; list = Arrays.asList(arr); MyAdapter adapter = new MyAdapter(this, R.layout.listitem_imv, list); mListView.setAdapter(adapter); } class MyAdapter extends ArrayAdapter&lt;String&gt;{ List&lt;String&gt; mList; LayoutInflater mInflater; int mResource; public MyAdapter(Context context, int resource, List&lt;String&gt; objects) { super(context, resource, objects); mResource = resource; mInflater = getLayoutInflater(); mList = objects; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view; if(convertView == null){ view = mInflater.inflate(mResource, null); }else{ view = convertView; } ImageView imageView = (ImageView) view.findViewById(R.id.imv); TextView textView = (TextView) view.findViewById(R.id.txv); imageView.setTag(mList.get(position));//tag of imageView == path to image new LoadImage().execute(imageView); textView.setText(mList.get(position).toString()); return view; } } class LoadImage extends AsyncTask&lt;Object, Void, Bitmap&gt;{ private ImageView imv; private String path; @Override protected Bitmap doInBackground(Object... params) { imv = (ImageView) params[0]; path = imv.getTag().toString(); Bitmap bitmap = null; File file = new File( Environment.getExternalStorageDirectory().getAbsolutePath() + path); if(file.exists()){ bitmap = BitmapFactory.decodeFile(file.getAbsolutePath()); } return bitmap; } @Override protected void onPostExecute(Bitmap result) { if(result != null &amp;&amp; imv != null){ imv.setVisibility(View.VISIBLE); imv.setImageBitmap(result); }else{ imv.setVisibility(View.GONE); } } } } </code></pre> <p>The 'sdcard/example/images' directory has the images: 1.jpg, 2.jpg, 3.jpg, 4.jpg, 6.jpg, 7.jpg and 9.jpg. the expected result is: <img src="https://i.stack.imgur.com/5yFKI.png" alt="example"></p> <p>But, if I scroll the list quickly, some images are inserted in the wrong items. It happens due to use of convertView in getView() method.</p> <p>If I use the following code, the code works fine:</p> <pre><code> //if(convertView == null){ // view = mInflater.inflate(mResource, null); //}else{ // view = convertView; //} view = mInflater.inflate(mResource, null); </code></pre> <p>When list scrolled quickly, two asyncTasks can reference one same View, due to use of convertView. How Can I cancel AsyncTask when the View is no longer visible?(and is useb by another item of ListView)</p> <p><strong>edit</strong></p> <pre><code> @Override protected void onPostExecute(Bitmap result) { if(result != null &amp;&amp; imv != null){ if(imv.getTag().equals(path)){ imv.setVisibility(View.VISIBLE); imv.setImageBitmap(result); }else{ imv.setVisibility(View.GONE); } }else{ imv.setVisibility(View.GONE); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload