リストビューで選択した項目の文字色を変更したいとします。クリックされたとき、それがうまく働いてリストビューでスクロールするときに項目選択が選択解除されました
@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;
}
メイン
@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);
}
}
});
}
アダプタ。色が変わった。しかし、私は一つの問題私は、次の5つの項目の可視でき、スクロールしていた場合、すなわち、例えば
iが(なぜなら画面解像度の)目に見える最初のわずか5項目でリストビュー内の10個の項目を有する午前を有します。私は最初の5つの要素を選択する
、色が変更されます。しかし、次の5つの要素
5つの第一の要素の色についてローリング場合に元の状態にしています。
を取得するには、アダプタの内部で以下を使用しますリストアイテムリストをスクロールするたびにリサイクルされ、オブジェクト内にブール変数が定義され、この変数の代わりにチェック可能なビューが表示されます。 –
提案してくれてありがとう、私の問題は、以下の彼の提案と友人に続いて解決されました。 –