在运行时更改ListView中的行项字体

时间:2012-05-10 16:27:28

标签: android android-listview android-arrayadapter

我使用ListView的自定义数组适配器创建了MyObjectMyObject的一个实例包含Stringboolean。当我想象ListView我的所有项目都以粗体显示时,如果您点按其中一项,则会启动新的Activity。我想要做的是每次按下并返回到ListView时,您可以看到您单击的项目不是粗体。这是我的自定义ArrayAdapter

public class MyAdapter extends ArrayAdapter<MyObject> {
private final Context context;
private final ArrayList<MyObject> values;

public MyAdapter(Context context, ArrayList<MyObject> values) {
    super(context, R.layout.my_item, values);
    this.context = context;
    this.values = values;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if(convertView == null){
        convertView = inflater.inflate(R.layout.my_item, parent, false);
    }
    TextView textView = (TextView) convertView.findViewById(R.id.itemName);
    textView.setText(values.get(position).getMyObjectName());
    if(values.get(position).isSetted()){
        textView.setTypeface(null, 0);
    }
    return convertView;
}

}

在我的Activity中我放了:

    @Override
protected void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();
}

并且代码实际上有效,但是有一个问题:在您点击某些项目后,其他未开发的项目在您回来时变得不大胆!这是随机发生的!为什么会这样?

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);

    String item = objList.get(position).getMyObjectName();
    objList.get(position).setSetted(true);


    to_ans.putExtra("ItemName", item);
    startActivity(to_ans);

}

项目的boolean值最初都设置为false

1 个答案:

答案 0 :(得分:1)

如果isSetted()false,您将需要恢复为默认的粗体样式(要恢复为潜在回收的默认样式View(对于如果convertView不是null),可以设置为不加粗体的情况):

if(values.get(position).isSetted()){
    textView.setTypeface(null);
} else {
    textView.setTypeface(Typeface.BOLD);
}