カスタムアレイアダプタの参照に問題があります。いくつかのフィールド(現在気になっている2つのボタンとプログレスバーを含む)を定義したレイアウトで配列アダプターを使用するアクティビティがあります。一方のボタンを押すとプログレスバーが表示され、もう一方のボタンを押すと非表示になります。
対応するボタンを押すと、進行状況バーがその行とともに表示されますが、リストをスクロールすると、リストを再利用するために表示されます。
押した行の進行状況を表示する以外の作り方を教えてください。(別の行を表示せずに)
これは私のxmlアダプターです(customadapterRutinalineadia)
これは私のxmlです:
<Button
android:id="@+id/btnLineasRutinaDiaEjercicioNoCompletado"
android:layout_width="33sp"
android:layout_height="27sp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="NoK"
android:textSize="6sp" />
<Button
android:id="@+id/btnLineasRutinaDiaOk"
android:layout_width="33sp"
android:layout_height="27sp"
android:layout_alignParentBottom="true"
android:layout_toLeftOf="@+id/btnLineasRutinaDiaEjercicioNoCompletado"
android:text="Ok"
android:textSize="8sp" />
<ProgressBar
android:id="@+id/pgrLineasRutinaDiaProgreso"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_above="@+id/textView13"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/chkLineasRutinaDiaHecho"
android:visibility="invisible" />
ボタンbtnLineasRutinaDiaOk
はプログレスバーを表示するために使用されます。ボタンbtnLineasRutinaDiaEjercicioNoCompletado
は、プログレスバーを非表示にするために使用されます。
これは私のArrayAdapter
public class CustomAdapterRutinaDiaLineas extends ArrayAdapter<Rutina>{
ArrayList<Rutina> lstRutinaDia;
ArrayList<Rutina> arrayDatos;
Rutina objRutina;
static Context context;
public CustomAdapterRutinaDiaLineas(Context contexto, ArrayList<Rutina> arrayDatos) {
super(contexto, R.layout.ll_lineas_rutina_dia, arrayDatos);
this.arrayDatos = arrayDatos;
this.context = contexto;
}
@Override
public View getView( int position, View convertView, ViewGroup parent){
View vistaFila =null;
final int ifila= position;
//final View auxVistaFila=null;
if (convertView == null) {
// LayoutInflater inflator = context.getLayoutInflater();
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vistaFila = vi.inflate(R.layout.ll_lineas_rutina_dia, null);
final View auxVistaFila = vistaFila;
final ElementosLinea objelementos = new ElementosLinea();
AsignarElementos(vistaFila,objelementos);
objelementos.btnOk.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View re) {
// TODO Auto-generated method stub
Rutina objru = (Rutina) objelementos.pgrProgresoCierre.getTag();
AccesoBd objAcceso = new AccesoBd();
objru._pgrProgress.setVisibility(View.VISIBLE);
//new CerrarEjercicio().execute("http://"+objAcceso.IpPc+"/CerrarEjercicioUnico.php");
}
});
objelementos.btncerrar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Rutina objru = (Rutina) objelementos.pgrProgresoCierre.getTag();
AccesoBd objAcceso = new AccesoBd();
objru._pgrProgress.setVisibility(View.INVISIBLE);
}
});
vistaFila.setTag(objelementos);
objelementos.pgrProgresoCierre.setTag(arrayDatos.get(position));
}else{
vistaFila=convertView;
((ElementosLinea) vistaFila.getTag()).pgrProgresoCierre.setTag(arrayDatos.get(position));
}
Rutina datossss = arrayDatos.get(position);
ElementosLinea objetos = (ElementosLinea)vistaFila.getTag();
if (datossss.getProgreso()==null){
datossss.setProgreso(objetos.pgrProgresoCierre);
}
return vistaFila;
}
private void AsignarElementos(View v,ElementosLinea Objetos){
//cabeceras
Objetos.btnOk=(Button)v.findViewById(R.id.btnLineasRutinaDiaOk);
Objetos.btncerrar=(Button)v.findViewById(R.id.btnLineasRutinaDiaEjercicioNoCompletado);
Objetos.pgrProgresoCierre=(ProgressBar)v.findViewById(R.id.pgrLineasRutinaDiaProgreso);
}
クリックしたアイテムのみのプログレスバーを表示し、他のアイテムは表示したくない。理由はリストを再利用することですが、解決策を見つけることができないということです