Показать скрытие TextView в адаптере списка на ItemClick

TextView, на который ссылается держатель.four, отображается, когда мой список заполняется. Когда я выбираю элемент строки, я хочу, чтобы держатель.four стал видимым для выбранной строки, но когда я выбираю другую строку, я хочу, чтобы предыдущий видимый держатель.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;
    }

person Dimitri    schedule 11.09.2013    source источник
comment
При выборе списка или при нажатии на элемент списка???   -  person user370305    schedule 11.09.2013
comment
да, но когда я использую onitemclicklistener, строка успешно видна, но когда я выбираю другую строку, предыдущая строка остается видимой. Я удаляю свой код, потому что это был неправильный способ сделать это.   -  person Dimitri    schedule 11.09.2013
comment
Просто используйте ссылку на 4-й TextView предыдущей строки списка и в каждом элементе списка нажмите «Проверить его видимость», если его Visible, затем сделайте его Gone.   -  person user370305    schedule 11.09.2013
comment
сохраните индекс позиции текущего выбранного элемента в переменной и отключите его видимость, когда вы выберете другой и обновите переменную до вновь выбранной позиции.   -  person Sayed Jalil Hassan    schedule 11.09.2013


Ответы (2)


Ну вот :

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;
        }
    });

}
person bugraoral    schedule 11.09.2013

Проверьте мой ответ на этот вопрос: как я могу заставить элементы выбора представления списка Android запоминать их состояние вне экрана?

Я думаю, вы можете использовать аналогичную идею: расширить макет элемента. Сделав это, вы также можете создавать собственные события и фиксировать их там, где они вам нужны.

person Szymon    schedule 11.09.2013