Java listview中的第一个进度条不';t进展

Java listview中的第一个进度条不';t进展,java,android,android-layout,listview,android-progressbar,Java,Android,Android Layout,Listview,Android Progressbar,我有一个非常糟糕的问题。 我有一个带适配器的listview public class MediaAdapter extends ArrayAdapter<Media> { public MediaAdapter(Context context, Media[] items) { super(context, R.layout.mediaitemlist, items); } /* private view holder class */ private class

我有一个非常糟糕的问题。 我有一个带适配器的listview

public class MediaAdapter extends  ArrayAdapter<Media> {


public MediaAdapter(Context context, Media[] items) {
    super(context, R.layout.mediaitemlist, items);
}

/* private view holder class */
private class ViewHolder {
    TextView media_name;
    TextView media_path;
    TextView media_version;
    TextView media_type;
    ProgressBar pb;
}   

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    View view = convertView;
    if (view == null) {
        view = (View)LayoutInflater.from(getContext()).inflate(R.layout.mediaitemlist, null);
        holder = new ViewHolder();
        holder.media_name = (TextView) view
                .findViewById(R.id.media_name);
        holder.media_path = (TextView) view
                .findViewById(R.id.media_path);
        holder.media_type = (TextView) view
                .findViewById(R.id.media_type);
        holder.media_version = (TextView) view
                .findViewById(R.id.media_version);
        holder.pb = (ProgressBar)view.findViewById(R.id.itemprogressdl);
        view.setTag(holder);

        //Maybe the problem is here ???????????
        getItem(position).setmProgressBar((ProgressBar)view.findViewById(R.id.itemprogressdl));
    } else {
        holder = (ViewHolder) view.getTag();
    }

    Media rowItem = (Media) getItem(position);

    holder.media_name.setText(rowItem.get_Name());
    holder.media_path.setText(rowItem.get_Path());
    holder.media_type.setText(rowItem.get_TypeString());
    holder.media_version.setText("" + rowItem.get_Version());
    rowItem.setmProgressBar(holder.pb);
    return view;
}
公共类MediaAdapter扩展了ArrayAdapter{
公共媒体适配器(上下文上下文,媒体[]项){
super(context,R.layout.mediateItemList,items);
}
/*私有视图持有者类*/
私有类视窗持有者{
TextView媒体名称;
TextView媒体路径;
TextView媒体版;
文本视图媒体类型;
ProgressBar-pb;
}   
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
视图=转换视图;
如果(视图==null){
view=(view)LayoutInflater.from(getContext()).flate(R.layout.mediateItemList,null);
holder=新的ViewHolder();
holder.media_name=(TextView)视图
.findViewById(R.id.media_名称);
holder.media_路径=(文本视图)视图
.findviewbyd(R.id.media\u路径);
holder.media_type=(TextView)视图
.findViewById(R.id.media_类型);
holder.media_版本=(文本视图)视图
.findViewById(R.id.media_版本);
holder.pb=(ProgressBar)view.findViewById(R.id.itemprogressdl);
视图.设置标签(支架);
//也许问题就在这里???????????
getItem(position).setmProgressBar((ProgressBar)view.findViewById(R.id.itemprogressdl));
}否则{
holder=(ViewHolder)view.getTag();
}
媒体行项目=(媒体)获取项目(位置);
holder.media_name.setText(rowItem.get_name());
holder.media_path.setText(rowItem.get_path());
holder.media_type.setText(rowItem.get_TypeString());
holder.media_version.setText(“+rowItem.get_version());
rowItem.setmProgressBar(holder.pb);
返回视图;
}
}

在此,mediaitemlist布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:background="@drawable/listitembackground" >

<TextView
    android:id="@+id/media_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@android:color/black"
    android:textSize="25sp" />

<TextView
    android:id="@+id/media_path"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/media_name"
    android:textColor="@android:color/black"
    android:visibility="invisible" />

<TextView
    android:id="@+id/media_version"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:textColor="@android:color/black" />

<TextView
    android:id="@+id/media_type"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginRight="20dp"
    android:layout_toLeftOf="@+id/media_version"
    android:textColor="@android:color/black" />

<ProgressBar
    android:id="@+id/itemprogressdl"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/media_name"
    android:layout_below="@+id/media_name"
    android:layout_toLeftOf="@+id/media_version" 
    android:max="100"
    android:visibility="invisible"
    android:indeterminate="true"/>

</RelativeLayout>

progressBar是媒体类的属性。一个媒体类根据其在列表视图中的位置确定自己的进度

但是,除listView的第一个属性外,所有progressBar属性都很好。如果我点击第二个或以上,我可以看到progressBar的进度,但第一个没有

那么,为什么第一个progressBar不工作,而下一个工作呢

如果您需要更多代码、注释或其他内容,请询问我。

尝试移动此行

getItem(position).setmProgressBar((ProgressBar)view.findViewById(R.id.itemprogressdl));
超出if..else条件。

尝试以下答案:

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    View view = convertView;
    Media rowItem = (Media) getItem(position);
    if (view == null) {
        view = (View)LayoutInflater.from(getContext()).inflate(R.layout.mediaitemlist, null);
        holder = new ViewHolder();
        holder.media_name = (TextView) view
                .findViewById(R.id.media_name);
        holder.media_path = (TextView) view
                .findViewById(R.id.media_path);
        holder.media_type = (TextView) view
                .findViewById(R.id.media_type);
        holder.media_version = (TextView) view
                .findViewById(R.id.media_version);
        holder.pb = (ProgressBar)view.findViewById(R.id.itemprogressdl);
        view.setTag(holder);

        //Maybe the problem is here ???????????
        getItem(position).setmProgressBar((ProgressBar)view.findViewById(R.id.itemprogressdl));
    } else {
        holder = (ViewHolder) view.getTag();
        rowItem.setmProgressBar(holder.pb);
    }

    holder.media_name.setText(rowItem.get_Name());
    holder.media_path.setText(rowItem.get_Path());
    holder.media_type.setText(rowItem.get_TypeString());
    holder.media_version.setText("" + rowItem.get_Version());

    return view;
}

您是否尝试过
holder.pb.setProgress()
no,因为我在第三个类中更新了进度,如下所示:oneMedia.getProgressBar().setProgress();它在第二个项目上起作用,但在第一个项目上不起作用,我不知道为什么…我不能调用rowItem,它是在条件之后定义的。。。。或者我移动媒体行项目=(媒体)获取项目(位置);在条件之前?事实上,所有progressBar第一次都为空。为什么?只有progressBar或textview?是的,我犯了一个错误,progressBars不是空的,但我看不到它们,就像屏幕外只有progressBar,所有的textview都已设置且正确