在列表视图中滚动时取消选择项目选择

Item selection was deselected while scrolling in listview

我想更改列表视图中 selected 项目的文本颜色。

主要

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

单击时它工作正常。颜色变了。但我有一个问题,即

例如,我在列表视图中有 10 个项目,起初只有 5 个项目可见(由于屏幕分辨率),如果我滚动我可以看到接下来的 5 个项目。

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

前5个元素颜色恢复原状

使用 View Holder 模式...使用 根据您的要求进行更改。

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