2012-06-08 11 views
8

Estoy tratando de establecer un progreso fijo en los elementos en un ListView. Solo veo un círculo giratorio indeterminado en ListView ... ¿qué estoy haciendo mal? (Estoy seguro que la respuesta es simple ... sólo que no estoy viendo)La barra de progreso de Android en una vista de lista siempre es indeterminada

Para el siguiente código XML diseño del adaptador:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
    > 
<TextView 
     android:id="@+id/some_text" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 
<ProgressBar 
     android:id="@+id/some_progress" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     /> 

Código:

public class SomeListAdapter extends ArrayAdapter<MyItem> { 

private static class ViewHolder { 
    TextView nameTextView; 
    ProgressBar valueProgressBar; 
} 

public BestChoiceListAdapter(Context context, List<MyItem> items) { 
    super(context, R.layout.list_item, items); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    View view = convertView; 
    if (view == null) { 
     LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = vi.inflate(R.layout.list_item, null); 

     holder = new ViewHolder(); 
     holder.nameTextView = (TextView) view.findViewById(R.id.some_text); 
     holder.valueProgressBar = (ProgressBar) view.findViewById(R.id.some_progress); 

     view.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    MyItem optionItem = getItem(position); 

    holder.nameTextView.setText(optionItem.getOptionName()); 
    int progress = (int) (optionItem.getOptionValue()); 

    holder.valueProgressBar.setProgress(progress); 

    return view; 
} 
} 

Respuesta

12

La forma más sencilla es aplicar el estilo horizontal a la misma:

<ProgressBar 
    android:id="@+id/some_progress" 
    style="@android:style/Widget.ProgressBar.Horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    /> 

Esto configurará todos los atributos de lo contrario se le tenga que añadir manualmente para aplicar un modo de progreso determinada.

Si tienes curiosidad, esto es lo que parece que el estilo de sistema como, en caso de que quería aplicar las propiedades de forma individual:

<style name="Widget.ProgressBar.Horizontal"> 
    <item name="android:indeterminateOnly">false</item> 
    <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> 
    <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item> 
    <item name="android:minHeight">20dip</item> 
    <item name="android:maxHeight">20dip</item> 
</style> 

HTH

+0

¡Eso lo hizo! Ojalá esto fuera un poco más obvio. –

0

¡Cambie el indeterminate mode a falso!

<ProgressBar 
    android:id="@+id/some_progress" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:indeterminate="false" 
    /> 
+1

He intentado esto y esto no soluciona el problema ya sea. –

Cuestiones relacionadas