2

下面的 Util.class 包含一个最大 2 个 int 数的静态 ArrayList。

public class Util extends Activity {

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

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

}

在我的 getView() 适配器方法中,我尝试更改 textview 并使图像仅对位置 3 和 5 可见。问题是图像视图只有最后一个元素可见,我无法显示 3 号图像视图。我怎样才能让适配器内部的两个图像视图都可见。这是我的 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;
    }
4

1 回答 1

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);
    }
    
于 2014-10-27T13:12:15.410 回答