在listview

时间:2016-10-05 03:46:08

标签: android listview baseadapter

我想更改listview中所选项目的文字颜色。

主要

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sub_alimentacao);

    List<Tag> tags = getTagsSubAlimentacao();

    final ListView listView = (ListView) findViewById(R.id.subAlimentacao);
    listView.setAdapter(new TagSubAlimentacaoAdapter(this, tags));



    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {


        @Override
        public void onItemClick(AdapterView<?> parent, final View view, final int position, long id) {


            TextView c = (TextView) view.findViewById(R.id.local);
            LikeButton lk = (LikeButton) view.findViewById(R.id.gostei);

            lk.setEnabled(false);


            //OBTEM A COR EM INTEIRO E CONVERTE PARA HEXADECIMAL
            Integer intColor = c.getCurrentTextColor();
            String hexColor = "#" + Integer.toHexString(intColor).substring(2);

            if (hexColor.equalsIgnoreCase("#2196F3")){
                c.setTextColor(Color.parseColor("#aaaaaa"));
                lk.setLiked(false);

            }else{
                c.setTextColor(Color.parseColor("#2196F3"));
                lk.setEnabled(true);
                lk.setLiked(true);

            }



        }
    });

}

适配器

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Tag tag = tags.get(position);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layoute = inflater.inflate(R.layout.item_sub, null);

    TextView titulo = (TextView) layoute.findViewById(R.id.local);
    LikeButton lk = (LikeButton) layoute.findViewById(R.id.gostei);
    titulo.setText(tag.getTitulo());
    lk.setLiked(tag.getAtivo());
    return layoute;
}
单击后它工作正常。颜色改变了。但我有一个问题,即

例如我在listview中有10个项目,最初只有5个项目可见(因为屏幕分辨率)如果我滚动我可以看到接下来的5个项目。

当我选择前5个元素时,颜色会发生变化。但是如果滚动接下来的5个元素

5个第一个元素的颜色恢复到原始状态。

2 个答案:

答案 0 :(得分:0)

使用查看持有人模式...根据您的要求使用this answers进行更改。

答案 1 :(得分:0)

在ListView中滚动时,它总是设置适配器,所以在内部适配器中你必须设置文本颜色,如果你更喜欢ViewHolder模式,那就更好了

使用以下内部适配器获取输出

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Tag tag = tags.get(position);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layoute = inflater.inflate(R.layout.item_sub, null);

    TextView titulo = (TextView) layoute.findViewById(R.id.local);
    LikeButton lk = (LikeButton) layoute.findViewById(R.id.gostei);
    titulo.setText(tag.getTitulo());
    boolean likeValue=tag.getAtivo();
    if(likeValue){
       titulo.setTextColor(Color.parseColor("#2196F3"));
    }else{
       titulo.setTextColor(Color.parseColor("#aaaaaa"));
    }
    lk.setLiked(likeValue);

    return layoute;
}