java - 更新 ListView 中 View 的内容

标签 java android listview android-view

我有一个 ListView,它将托管名为 TaskView 的复合 View ,它是 Task 的可视化表示。后台工作在 AsyncTaskTaskView 的子级(两个 TextView 和一个 ProgressView)中完成在 onProgressUpdate() 中更新。更新完 View 后,我调用 listView.invalidateViews(),我相信它应该重绘其所有 subview 。然而,事实并非如此,因为任何观点都没有改变。设置一些断点并观察各个 View 的值后,我确定它们确实发生了变化,但它们的新值没有反射(reflect)在屏幕上

这是我的 AsyncTask 的概述(注意:类和方法名称已被简化)

private TaskView view;

public Monitor(TaskView view) {
    this.view = view;
}

protected Void doInBackground(Void... params) {
    // <set up a handler to push events to onProgressUpdate()>
    // <do work>
    return null;
}

protected void onProgressUpdate(Event... values) {
    Task task = view.getTask();

    // <update task based on the Event>

    view.update(); // Tells view to update its TextViews and ProgressBar
                   // based on task's values
    listView.invalidateViews(); // Refresh ListView views?
}

如何让 ListView 重绘其子项?


根据要求,这里是TaskAdapter.getView()

public View getView(int position, View convertView, ViewGroup parent) {
    Task task = getItem(position);
    TaskView view = (TaskView) convertView;
    if (view == null) {
        // Instantiates a TaskView and sets the Task
        view = TaskView.newInstance(getContext(), task);
    }
    return view;
}

TaskView.update()

public void update() {
    // https://github.com/Todd-Davies/ProgressWheel
    progressWheel.setProgress(task.getProgress());
    if (task.isIndeterminate()) {
        progressWheel.spin();
    } else {
        progressWheel.stopSpinning();
    }

    // status and secondaryStatus are TextViews
    status.setText(task.getStatus());
    secondaryStatus.setText(task.getSecondaryStatus());
}

最佳答案

要使用新数据刷新 ListView ,请调用分配给 ListView 的适配器的 notifyDataSetChanged() 方法。

关于java - 更新 ListView 中 View 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129695/

相关文章:

java - Glassfish 不处理 java

JAVA SPRING MVC 在页面上显示之前修改输出流

java - 有没有办法中断有状态 session bean?

java - 具有 persistence.xml 和属性映射的 JPA EntityManagerFactory

android - 在这种情况下我该怎么办?

android - com.android.dex.DexException : Multiple dex files define Ledu/hawhamburg/vuforia/BuildConfig;

Android - 如何在 Child 中获取 JSON 数组

java - 使用自定义选择器的 ListView 项目背景

c# - ListView ItemActivate 延迟

android - 从 onClickListener 检索图像(保存在 sqlite 中)