When I notifydatasetchanged my adapter every second, click events dont work properly
<p>I want to implement custom progressview on base adapter for showing background download progress on list items, every second I check download progress and update my model, then trigger notifydataset to reflect the progress to UI. Since it couses so may UI refresh operations, I cannot get click events properly. What should I do to overcome this?</p>

<pre><code>  @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            while (true) {

                startJob();
            }
        }
    });
    t.start();
    return START_STICKY;
}
</code></pre>

<p>start job method</p>

<pre><code> public void startJob() {
    BusStation.getMainThreadBus().post("deneme");

    DownloadManager mDownloadManager = new DownloadManager(getContentResolver(),
            getPackageName());
    mDownloadManager.setAccessAllDownloads(true);

    DownloadManager.Query myDownloadQuery = new DownloadManager.Query();

    Cursor cursor = mDownloadManager.query(myDownloadQuery);

    ArrayList&lt;Integer&gt; statuses = new ArrayList&lt;&gt;();

    try {
        DergilikApplication application = (DergilikApplication) getApplicationContext();
        HashMap&lt;String, DownloadInfo&gt; downlodInfoHashMap = application.getDownlodInfoHashMap();
        while (cursor.moveToNext()) {
            int mIdColumnId = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_ID);

            int mIdStatus = cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_STATUS);

            int mTotalBytesColumnId = cursor
                    .getColumnIndexOrThrow(DownloadManager.COLUMN_TOTAL_SIZE_BYTES);
            int mCurrentBytesColumnId = cursor
                    .getColumnIndexOrThrow(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
            int mDescrColumnId = cursor
                    .getColumnIndexOrThrow(DownloadManager.COLUMN_DESCRIPTION);
            int uriId = cursor
                    .getColumnIndexOrThrow(DownloadManager.COLUMN_URI);
            int localUriId = cursor
                    .getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_URI);
            long totalBytes = cursor.getLong(mTotalBytesColumnId);
            String desc = cursor.getString(mDescrColumnId);


            long currentBytes = cursor.getLong(mCurrentBytesColumnId);
            long downloadId = cursor.getLong(mIdColumnId);
            int status = cursor.getInt(mIdStatus);
            String localUri = cursor.getString(localUriId);
            String uri = cursor.getString(uriId);
            if (application.getProfile() != null &amp;&amp; desc.contains(application.getProfile().getLoginNumber())) {
                statuses.add(status);


                DownloadInfo downlodInfo = new DownloadInfo();

                downlodInfo.setCurrentProgress(currentBytes);
                downlodInfo.setTotalProgress(totalBytes);
                downlodInfo.setDescription(desc);
                downlodInfo.setStatus(status);
                downlodInfo.setDownloadId(downloadId);
                downlodInfo.setUri(uri);
                downlodInfo.setLocalUri(localUri);
                downlodInfoHashMap.put(desc, downlodInfo);
            }


        }
        application.setDownlodInfoHashMap(downlodInfoHashMap);
    } finally {
        cursor.close();
    }

    int counter = 0;
    for (Integer status : statuses) {
        if (!(status == DownloadManager.STATUS_FAILED || status == DownloadManager.STATUS_SUCCESSFUL)) {
            counter++;
        }

    }
    if (counter == statuses.size()) {
    }

    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }


}
</code></pre>

<p>i push event with otto library and notfy data set changed </p>

<pre><code> @Subscribe
public void getMessage(String s) {


    try {
        dergilerAdapter.notifyDataSetChanged();
    } catch (Exception e) {
        e.printStackTrace();
    }
    //tvDownloaded.setText("% " + (int) (percentage * 100));

}
</code></pre>