Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ListView Android中的引用错误?_Android_Android Layout_Android Listview - Fatal编程技术网

ListView Android中的引用错误?

ListView Android中的引用错误?,android,android-layout,android-listview,Android,Android Layout,Android Listview,大家好, 我有一个问题困扰了我两天,如图所示,我只启动进程#1并将进程更新到进程栏,但当我向下滚动时,我看到另一个“进程栏”运行,它与我的第一个进程状态相同(#1)。我猜我的ListView项目被重用了,并且它也使用了我的进程栏,有人遇到过这个问题吗?我还附上如下代码: 谢谢你的阅读 class gridAdapter extends BaseAdapter{ @Override public int getCount() { // TODO Auto-

大家好,

我有一个问题困扰了我两天,如图所示,我只启动进程#1并将进程更新到进程栏,但当我向下滚动时,我看到另一个“进程栏”运行,它与我的第一个进程状态相同(#1)。我猜我的
ListView
项目被重用了,并且它也使用了我的进程栏,有人遇到过这个问题吗?我还附上如下代码:

谢谢你的阅读

    class gridAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        String currentText = list.get(position);
        View cell = convertView;
        if(cell==null){
            LayoutInflater inflater = MainActivity.this.getLayoutInflater();
            cell = inflater.inflate(R.layout.gird_tiem, null);
              ViewHolder viewHolder = new ViewHolder();
              viewHolder.text = (TextView) cell.findViewById(R.id.tv_test);
              viewHolder.button = (Button) cell.findViewById(R.id.button);
              viewHolder.progressBar = (ProgressBar) cell.findViewById(R.id.process);
              cell.setTag(viewHolder);
        }

         final ViewHolder holder = (ViewHolder) cell.getTag();
         holder.text.setText(currentText);
         holder.button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                processManager.onAddItemClick(100, holder.progressBar);
            }
        });
        return cell;
    }


}

static class ViewHolder {
    public TextView text;
    public Button button;
    public ProgressBar progressBar;
  }
//我的流程经理

public class ProcessManager {

Activity activity;

public ProcessManager(Activity activity) {
    super();
    this.activity = activity;
}

int temp;
public void onAddItemClick(final int tasks, final ProgressBar cell) {
    new Thread(new Runnable() {

        @Override
        public void run() {
            for(int i = 0;i<tasks;i++){
                temp = i;
                Thread thread = new Thread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub

                    }
                });

                thread.run();
                try {
                    thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                activity.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        cell.setProgress((temp*100)/tasks);
                    }
                });

            }

        }
    }).start();



}
公共类ProcessManager{
活动;
公共进程管理器(活动){
超级();
这个。活动=活动;
}
内部温度;
添加项单击上的公共void(最终int任务、最终ProgressBar单元格){
新线程(newrunnable()){
@凌驾
公开募捐{

对于(int i=0;i尽量不要覆盖来自Holder so的TextView

 if TextView == null 
然后获取文本视图,否则只返回它。

您需要将

final ViewHolder holder = (ViewHolder) cell.getTag();

if(cell==null)
语句后的
else
括号中。否则每次都会从标记中创建子项(循环视图)。

能否将xml布局发布到progressBars所在的位置?您应该在
onAddItemClick()中修改代码
方法。项目自行启动进度,因为您假设引用的
ProgressBar
对于每一行都是不同的,这不是真的,因为
ListView
回收行。不,即使convertView!=nullI不是指convertView==null,而是指TextView,例如,“text”来自ViewHolder的文本。来自ViewHolder的文本永远不能为空。因为在这种情况下,它总是为新文本更改(不正确)第一。作者应该避免这样做,然后一切都会好起来。我不太明白你的意思…如果你是指温格的意思,那么是的。我已经知道,但我希望它有更好的表现,如果方向改变,它将失去视野。当方向改变时,你总是会丢失数据,无论你做什么,因为活动是重新开始的开始。不,使用建议的内容不会降低性能。事实上,在这种情况下,使用
else
比不使用要好。如果不使用
else
,那么您可能还必须去掉
If
,从而取消视图循环的优势。
 if TextView == null 
final ViewHolder holder = (ViewHolder) cell.getTag();