2016-09-21 2 views
0

私のListViewアイテムは、以下のコンポーネントで構成されています。TextViewそして、その下に2つのImageViews~とdislikeがあります。1つのListViewアイテムをAndroidでクリックすると、他のListViewアイテムに影響がありますか?

だから、私は青に灰色からlikeまたはdislikeImageViewを変更できるようにしたいlikeまたはdislikeのいずれかをクリックしたとき。

likeをクリックすると、likeImageViewはグレーからブルーに変わります。しかし、対応するListViewアイテムだけでなく、リスト内のすべての3番目のアイテムについて - リストにある最初のアイテムのlikeをクリックすると、4番目、7番目、10番目のアイテムlikeImageViewからの変更灰色から青まで。

ファイルroot elementの私のpost_list_item.xmlには、次のように指定しました。android:descendantFocusability="blocksDescendants"ですが、どちらでも役に立ちません。

私の質問は - 私は何をすべきかを持っていないので、私はどちらかlikeまたはdislikeをクリックしたときに私がlikeまたは青灰色からdislikeImageView他のリスト項目に影響を与えることなく変更することができるだろうということ?ここで

CursorAdapter

public class PostCursorAdapter extends CursorAdapter { 

    public PostCursorAdapter(Context context, Cursor c, int flags) { 
     super(context, c, flags); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     return LayoutInflater.from(context).inflate(R.layout.post_list_item, parent, false); 
    } 

    @Override 
    public void bindView(View view, final Context context, Cursor cursor) { 
     String post = cursor.getString(cursor.getColumnIndex(DBOpenHelper.POST)); 
     final String liked = cursor.getString(cursor.getColumnIndex(DBOpenHelper.LIKED)); 
     String disliked = cursor.getString(cursor.getColumnIndex(DBOpenHelper.DISLIKED)); 
     final String post_id = cursor.getString(cursor.getColumnIndex(DBOpenHelper.POST_ID)); 


String userliked = cursor.getString(cursor.getColumnIndex(DBOpenHelper.USER_LIKED)); 


     TextView tvPost = (TextView) view.findViewById(R.id.tvPost); 
     tvJoke.setText(post); 

     TextView tvLikeCount = (TextView) view.findViewById(R.id.tvLikeCount); 
     tvLikeCount.setText(liked); 

     TextView tvDislikesCount = (TextView) view.findViewById(R.id.tvDislikeCount); 
     tvDislikesCount.setText(disliked); 

     final ImageView ivLike = (ImageView) view.findViewById(R.id.ivLike); 
// has the user liked it? 
int check = Integer.parseInt(userliked); 
if(check == 1){ 
    String uri = "@drawable/like_blue"; // where myresource (without the extension) is the file 
    int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); 
    Drawable res = context.getResources().getDrawable(imageResource); 
    ivLike.setImageDrawable(res); 
} 
     ivLike.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String uri = "@drawable/like_blue"; 
       int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); 
       Drawable res = context.getResources().getDrawable(imageResource); 
       ivLike.setImageDrawable(res); 

      } 
     }); 
    } 

} 

答えて

0

の私のコードは、あなたが/あなたのドローアブルにこのようなlike.xmlを状態ドローアブルを使用することができているあなたが追加することができます

<item android:state_activated="true" 
     android:drawable="@drawable/like_blue"/> 
    <item android:drawable="@drawable/like_grey"/> 

like.xml

あなたのイメージビューに

android:src="@drawable/like" 
android:clickable="true" 
嫌い画像のアダプタで

ivLike.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(ivLike.isActivated()) 
       ivLike.setActivated(false); 
      else 
       ivLike.setActivated(true); 
     } 
    }); 

も、あなたは同じことを行うことができます。

+0

ありがとう:あなたのケースでは、最も簡単な方法は、あなたのonClickメソッドに渡されたビューを使用することです。私はあなたが言ったことをしたし、それはまだ動作しません。 – Nikolaj

+0

イメージを変更しているかどうかを確認します。あなたが以前に言ったように他のアイテムに影響を与えていますか? –

+0

はい、イメージを変更していますが、それでもリスト内の他のアイテムに影響します。 – Nikolaj

0

ビューのリサイクルの問題が発生しています。詳細は、this questionの回答をご覧ください。私の質問に答えるために時間を割いて

ivLike.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      ImageView icon = (ImageView) view; 
      String uri = "@drawable/like_blue"; 
      int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); 
      Drawable res = context.getResources().getDrawable(imageResource); 
      icon.setImageDrawable(res); 

     } 
    }); 
+0

私の質問に答える時間をとってくれてありがとう。私はあなたが言ったことをしたし、それはまだ動作しません。 – Nikolaj

+0

ビューのリサイクルについてお読みですか?リンクを見るだけで、あなたはそれを理解することができます。 – C0D3LIC1OU5

関連する問題