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 に答える