【问题标题】:Changing style on textview in a list view row when pressed按下时更改列表视图行中文本视图的样式
【发布时间】:2012-03-25 21:57:18
【问题描述】:

我想在单击该行时更改列表视图行中文本视图的样式。该文本应保持焦点,直到按下另一行。我正在使用 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 行

【问题讨论】:

  • BaseAdapter 到底是什么子类?

标签: android android-listview android-adapter


【解决方案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
}
//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-10-23
    相关资源
    最近更新 更多