Изменение стиля в текстовом представлении в строке представления списка при нажатии

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

Это часть моего базового класса адаптера.

   public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    MyHolder holder;
    LayoutInflater inflater = context.getLayoutInflater();
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.street_listrow, null);
        holder = new MyHolder();
        holder.txtViewStreet= (TextView) convertView
                .findViewById(R.id.StreetName);
        holder.txtViewArea = (TextView) convertView
                .findViewById(R.id.StreetArea);
        holder.txtViewDist = (TextView) convertView
                .findViewById(R.id.StreetDistance);
        holder.ivGo = (ImageView) convertView.findViewById(R.id.StreetGo);
        convertView.setTag(holder);
    } else {
        holder = (MyHolder) convertView.getTag();;
    }

      holder.txtViewStreet.setText(street.get(position).getStreet());
      holder.txtViewArea.setText(street.get(position).getArea());
      holder.ivGo.setBackgroundResource(R.drawable.goicon);
      int tempDist = Integer.parseInt(street.get(position).getDistance());
      if(tempDist>1000){
          Double bigDist = (double)tempDist / 1000;
          dist = df.format(bigDist) +" km";
      }else{
          dist = tempDist+" m";
      }
      holder.txtViewDist.setText(dist);
    return convertView;
}

Я хочу, чтобы txtViewStreet изменил цвет на зеленый в строке, по которой щелкнули.

В основном:

Строка1

Ряд2

Ряд3

Пользователь нажимает строку 2

Строка1

Строка 2

Ряд3

Пользователь нажимает строку 1

Строка 1

Ряд2

Ряд3


person user1163392    schedule 25.03.2012    source источник
comment
Какой именно подкласс BaseAdapter?   -  person user    schedule 25.03.2012


Ответы (1)


Вы можете создать поле в своем классе адаптера, которое будет содержать текущий выбранный элемент:

int current = -1;

Эта позиция будет обновляться каждый раз, когда вы щелкаете строку в onItemClick():

protected void onListItemClick(ListView l, View v, int position, long id) {
        adapter.current = position;
        adapter.notifyDataSetChanged();
    }

затем в вашем методе getView():

//...
holder.txtViewStreet.setText(street.get(position).getStreet());
if (position == current) {
    holder.txtViewStreet.setTextColor(Color.GREEN);
} else {
    holder.txtViewStreet.setTextColor(Color.WHITE); // or what is your default color
}
//...
person user    schedule 25.03.2012