0

当我的列表视图被填充时, holder.four 引用的 TextView 是可见的。当我选择一个行元素时,我希望 holder.four 对所选行变得可见,但是当我选择另一行时,我希望前一个 holder.four 可见变得不可见,并且新选择的位置行 holder.four 变得可见。我怎样才能做到这一点。这是填充列表视图的 getview 方法。

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

        if (convertView == null) {

            vi = inflater.inflate(R.layout.row_operation, null);
            holder = new ViewHolder();
            holder.one = (TextView) vi.findViewById(R.id.text_on);
            holder.two = (TextView) vi.findViewById(R.id.text_messag);
            holder.three = (TextView) vi.findViewById(R.id.text_th);
            holder.four = (TextView) vi.findViewById(R.id.text_details);

            vi.setTag(holder);

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

        vi = inflater.inflate(R.layout.row_operation, null);
        holder = new ViewHolder();
        holder.one = (TextView) vi.findViewById(R.id.text_on);
        holder.two = (TextView) vi.findViewById(R.id.text_messag);
        holder.three = (TextView) vi.findViewById(R.id.text_th);
        holder.four = (TextView) vi.findViewById(R.id.text_details);

        vi.setTag(holder);

        holder.one.setText(data.get(position).getmontant()+" EUR");
        holder.two.setText((data.get(position).getlibelle()));
        holder.three.setText(data.get(position).getdateValeur());

        holder.four.setVisibility(View.GONE);
        holder.four.setText(data.get(position).getdateOper());

        //clickEvent();

        return vi;
    }
4

2 回答 2

3

干得好 :

Holder selectedHolder;

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

    if (convertView == null) {

        vi = inflater.inflate(R.layout.row_operation, null);
        holder = new ViewHolder();
        holder.one = (TextView) vi.findViewById(R.id.text_on);
        holder.two = (TextView) vi.findViewById(R.id.text_messag);
        holder.three = (TextView) vi.findViewById(R.id.text_th);
        holder.four = (TextView) vi.findViewById(R.id.text_details);

        vi.setTag(holder);

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

    //vi = inflater.inflate(R.layout.row_operation, null);
    //holder = new ViewHolder();
    //holder.one = (TextView) vi.findViewById(R.id.text_on);
    //holder.two = (TextView) vi.findViewById(R.id.text_messag);
    //holder.three = (TextView) vi.findViewById(R.id.text_th);
    //holder.four = (TextView) vi.findViewById(R.id.text_details);


    holder.one.setText(data.get(position).getmontant()+" EUR");
    holder.two.setText((data.get(position).getlibelle()));
    holder.three.setText(data.get(position).getdateValeur());

    holder.four.setVisibility(View.GONE);
    holder.four.setText(data.get(position).getdateOper());


    //clickEvent();
    vi.setTag(holder);

    vi.setOnClickListener(this);
    return vi;
}
@Overrite

public void onClick(View v){
    v.post(new Runnable() {
        @Override
        public void run() {
            ViewHolder holder = ((ViewHolder)v.getTag());
            holder.four.setVisibility(View.VISIABLE);
            if(selectedHolder != null)
                selectedHolder.four.setVisibility(View.INVISABLE);
            selectedHolder = holder;
        }
    });

}
于 2013-09-11T09:17:58.107 回答
0

检查我对这个问题的回答:如何让 android 列表视图选择器项目记住它们在屏幕外的状态?

我想你可能会使用类似的想法:扩展项目的布局。完成此操作后,您还可以创建自定义事件并在需要的地方捕获它们。

于 2013-09-11T09:17:23.730 回答