2016-10-05 14 views
0

リストビューで選択した項目の文字色を変更したいとします。クリックされたとき、それがうまく働いてリストビューでスクロールするときに項目選択が選択解除されました

@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つの第一の要素の色についてローリング場合に元の状態にしています。

+0

を取得するには、アダプタの内部で以下を使用しますリストアイテムリストをスクロールするたびにリサイクルされ、オブジェクト内にブール変数が定義され、この変数の代わりにチェック可能なビューが表示されます。 –

+0

提案してくれてありがとう、私の問題は、以下の彼の提案と友人に続いて解決されました。 –

答えて

0

スクロールテキストの色を設定する必要があり、あなたが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; 
} 
+0

アダプタを有効にして無効にする方法を実装してから、彼の提案でメインを呼び出して私の問題を解決しました。 '公共ボイドalteraCor(INT位置){ tags.get(位置).setAtivo(TRUE)。 }公共ボイドremoveCor(INT位置){ tags.get(位置).setAtivo(偽)。 } 「 ありがとうございました! –

+0

あなたの最も歓迎:) – Aditi

0

使用ビューホルダー柄... this answersを使用し、あなたのrequirmentごとなどの変更を行います。リストビューで

+0

私は見て、ありがとう! –

関連する問題