Android:ListView适配器中的OnClickListener有时无法正常工作

用户名

我有一个包含多个包含进度栏的项目的ListView。我目前有一个线程设置来更新每个小节的进度,如下所示:

 h = new Handler();
    h.postDelayed(new Runnable() {
        public void run() {
            game.update();
            h.postDelayed(this, 20);
        }
    }, 20);

然后,我更新每个列表项的进度,如下所示:

 progress += timeInc;
 if (progress >= progressMax)
     completeWork();
     updateView();

updateView方法执行以下操作:

public void updateView() {
    try {
        activity.runOnUiThread(updateView);
    } catch (Exception e) {
        e.printStackTrace();
        if (listView != null)
            listView.post(updateView);
    }
}

因此,基本上,我每秒都要多次调用notifyDataSetChanged。当我不这样做时,ProgressBar的进度不会移动,但是我可以正常地单击Items。但是,尽管调用了很多次,有时列表中的Items上的OnCLickListener不会被触发。我认为它可能会被notifyDataSetChanged的调用以某种方式中断。

这是我在适配器中应用OnClickListener的位置:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            if (files != null) {
                if (!files.get(position).isClicked()) {
                    // FAILED TO INTERACT:

                }
            }
        }
    });
    listView.setAdapter(fileAdapter);
    updateView = new Runnable() {
        @Override
        public void run() {
            fileAdapter.notifyDataSetChanged();
            listView.invalidate();
        }
    };

这是什么问题?还有什么其他方法可以更新progressBars而不必多次调用此方法?

更新:我减少了调用该方法的次数,并且单击现在响应更快。但是有时还是会发生。

谢谢你。

用户名

找出解决方案。与其更新整个列表,不如如下更新单个项:

public boolean updateProgress(File file) {
    if (listView == null)
        return false;
    int position = files.indexOf(file);
    int first = listView.getFirstVisiblePosition();
    int last = listView.getLastVisiblePosition();
    if (position < first || position > last) {
        return false;
    } else {
        View convertView = listView.getChildAt(position - first);
        ProgressBar bar = (ProgressBar) convertView.findViewById(R.id.progress_bar);
        if (file.isWorking()) {
            bar.setVisibility(View.VISIBLE);
            bar.setMax(file.progressMax);
            bar.setProgress(file.progress);
            bar.invalidate();
        } else {
            bar.setVisibility(View.GONE);
        }
        return true;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android适配器getItemViewType无法正常工作

来自分类Dev

Android同步适配器无法正常工作

来自分类Dev

阵列适配器无法正常工作

来自分类Dev

GridView适配器无法正常工作

来自分类Dev

适配器 addItem 无法正常工作

来自分类Dev

带有arraylist的listview,android中的简单适配器

来自分类Dev

Android ListView onClickListener自定义适配器

来自分类Dev

当列表大到可以滚动时,Recycler View 适配器无法正常工作

来自分类Dev

JSONP适配器Phonegap项目无法正常工作

来自分类Dev

自定义适配器notifyDataSetChanged无法正常工作

来自分类Dev

Emberjs Fixture适配器queryFixture无法正常工作

来自分类Dev

屏幕旋转适配器notifyDataSetChanged无法正常工作

来自分类Dev

适配器上的Android更改复选框无法正常工作

来自分类Dev

Android中的ListView和适配器,是否属于适配器设计模式?

来自分类Dev

无法将JSON中的新数据添加到Android中的Listview适配器

来自分类Dev

Android Studio中的ListView中的适配器

来自分类Dev

在回调方法中设置适配器时,Xamerin Android ListView未填充

来自分类Dev

使用自定义适配器时如何从Android中的ListView获取数据

来自分类Dev

Android中的ListView计数与适配器计数

来自分类Dev

Android ListView更改项在适配器中的选定状态

来自分类Dev

如何从Android的Listview中删除适配器

来自分类Dev

我的Android Listview适配器中的IndexOutOfBoundsException

来自分类Dev

如何在其适配器中刷新android listview

来自分类Dev

Android ListView中适配器和模板视图的组合

来自分类Dev

AlertDialog中的Android ListView-设置适配器

来自分类Dev

从Android中的ListView适配器获取TextView

来自分类Dev

Android:ListView适配器中的业务逻辑?

来自分类Dev

Android:从viewPager中的Fragment调用ListView的适配器的getview()

来自分类Dev

Android-在Listview中显示来自适配器的数据

Related 相关文章

  1. 1

    Android适配器getItemViewType无法正常工作

  2. 2

    Android同步适配器无法正常工作

  3. 3

    阵列适配器无法正常工作

  4. 4

    GridView适配器无法正常工作

  5. 5

    适配器 addItem 无法正常工作

  6. 6

    带有arraylist的listview,android中的简单适配器

  7. 7

    Android ListView onClickListener自定义适配器

  8. 8

    当列表大到可以滚动时,Recycler View 适配器无法正常工作

  9. 9

    JSONP适配器Phonegap项目无法正常工作

  10. 10

    自定义适配器notifyDataSetChanged无法正常工作

  11. 11

    Emberjs Fixture适配器queryFixture无法正常工作

  12. 12

    屏幕旋转适配器notifyDataSetChanged无法正常工作

  13. 13

    适配器上的Android更改复选框无法正常工作

  14. 14

    Android中的ListView和适配器,是否属于适配器设计模式?

  15. 15

    无法将JSON中的新数据添加到Android中的Listview适配器

  16. 16

    Android Studio中的ListView中的适配器

  17. 17

    在回调方法中设置适配器时,Xamerin Android ListView未填充

  18. 18

    使用自定义适配器时如何从Android中的ListView获取数据

  19. 19

    Android中的ListView计数与适配器计数

  20. 20

    Android ListView更改项在适配器中的选定状态

  21. 21

    如何从Android的Listview中删除适配器

  22. 22

    我的Android Listview适配器中的IndexOutOfBoundsException

  23. 23

    如何在其适配器中刷新android listview

  24. 24

    Android ListView中适配器和模板视图的组合

  25. 25

    AlertDialog中的Android ListView-设置适配器

  26. 26

    从Android中的ListView适配器获取TextView

  27. 27

    Android:ListView适配器中的业务逻辑?

  28. 28

    Android:从viewPager中的Fragment调用ListView的适配器的getview()

  29. 29

    Android-在Listview中显示来自适配器的数据

热门标签

归档