2014-10-27 86 views
2

下面的Util.class包含一個靜態ArrayList,最大值爲2的int數。更新EfficientAdapter ListView中的特定行Android

public class Util extends Activity { 

    public static ArrayList<Integer> selectedPosition= new ArrayList<Integer>(); 

    selectedPosition.add(3); 
    selectedPosition.add(5); 

} 

以我getView()適配器方法我試圖改變TextView的,並提出了3位和5只可見的圖像。問題是imageview只有最後一個元素是可見的,我不能顯示3號imageview。我怎樣才能在適配器內部同時看到兩個imageview。這裏是我的getview方法。

@Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     vi = convertView; 

     if (convertView == null) { 

      vi = inflater.inflate(R.layout.vrow, null); 
      holder = new ViewHolder(); 
      holder.one = (TextView) vi.findViewById(R.id.text_one); 
      holder.two = (TextView) vi.findViewById(R.id.text_second); 
      holder.three = (TextView) vi.findViewById(R.id.text_num_compte); 
      holder.image = (ImageView)vi.findViewById(R.id.single_image); 
      holder.relative_layout = (RelativeLayout)vi.findViewById(R.id.corner); 

     } else 
      holder = (ViewHolder) vi.getTag(); 

     vi.setTag(holder); 

     String stDebit =Util.decimalFloatForm(Float.valueOf((data.get(position).getSoldeCompte()))); 
     if (stDebit.startsWith(",")) 
      stDebit = "0 000"+stDebit; 

     if (data.get(position).getAuthCompte().equalsIgnoreCase("N")){ 

      holder.one.setText(data.get(position).getLibelleCompte()); 
      holder.two.setText(stDebit+" EUR"); 
      holder.three.setText(vi.getResources().getString(R.string.special)+" "+data.get(position).getNumComtpe());   

     }else { 

      holder.one.setText(data.get(position).getLibelleCompte()); 
      holder.two.setText("xx,xxx EUR"); 
      holder.three.setText(vi.getResources().getString(R.string.special)+" "+data.get(position).getNumComtpe());   
     } 


     holder.image.setVisibility(View.GONE); //hide right tick 

     System.out.println("VirementEmmeteurSize : "+Util.selectedPosition.size()); 

     //check if selectedPosition is empty 
     if (Util.selectedPosition!=null){ 


      for(int x=0;x<Util.selectedPosition.size();x++){ 

       int index = Util.selectedPosition.get(x).toString().indexOf(String.valueOf(position)); 
       boolean boolValue = (index == -1?false:true); 

       if (boolValue){ 
        holder.two.setText(stDebit+" "+data.get(position).getDeviseCompte()); 
        holder.image.setVisibility(View.VISIBLE); //show right tick 

       }else { 
        holder.image.setVisibility(View.GONE); //hide right tick 
       } 
      } 
     } 




     return vi; 
    } 
+0

我認爲選擇項處理自定義列表,而不是僅僅試圖把一個標誌在列表中的項目持有人或自定義類的列表項,並在此基礎上標誌值試圖隱藏/顯示圖像。 – 2014-10-27 12:39:58

+0

你想要整個自定義適配器 – Dimitri 2014-10-27 12:44:35

+0

請檢查我編輯的評論,並把你的適配器整個代碼。 – 2014-10-27 12:46:12

回答

2

試試這個辦法,希望這將幫助你解決你的問題。

  1. 拿一個標誌ComptePost類

    private boolean isSelected; 
    
    public void setIsSelected(boolean isSelected){ 
    this.isSelected=isSelected; 
    } 
    
    public boolean isSelected(){ 
    return isSelected; 
    } 
    
  2. 如何更改選擇值。

    data.get(3).setIsSelected(true); 
    
    data.get(5).setIsSelected(true); 
    
  3. 如何在適配器中使用選擇值。

    if(data.get(position).isSelected()){ 
        holder.image.setVisibility(View.VISIBLE); 
    }else{ 
        holder.image.setVisibility(View.GONE); 
    } 
    
+0

我明白了你的觀點並且感謝:) – Dimitri 2014-10-27 13:12:56

+0

@ Dimitri,很高興幫助你,親愛的... – 2014-10-27 13:18:24