2014-10-27 54 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