2016-09-21 96 views
0

我的ListView項目包含以下組件 - TextView,然後在它下面有兩個ImageViews - likedislikeAndroid單擊一個ListView項目會影響其他ListView項目嗎?

所以,當我在任likedislike單擊我希望能夠從灰色likedislikeImageView變爲藍色。

當我點擊like時,likeImageView確實從灰色變爲藍色。但不僅對於相應的ListView項目,而是列表中的每個第3項 - 如果我在我的列表中有10個項目,並且我點擊列表中第一項的like那麼第4,7和10項likeImageView從灰色到藍色。

在我的post_list_item.xml中的文件root element我指定了以下android:descendantFocusability="blocksDescendants"但它也沒有幫助。

我的問題是 - 什麼我必須這樣做,當我點擊任何likedislike我將能夠改變likedislikeImageView由灰色變爲藍色,而不會影響其他列表中的項目?

這裏是我的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這樣,

like.xml

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

您可以添加到你的imageview的

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

感謝您抽出時間來回答我的問題。我只是做了你所說的,但它仍然不起作用。 – Nikolaj

+0

它正在改變圖像或沒有。它是否會影響到像你之前說過的其他項目? –

+0

是的,它正在改變圖像,但它仍然影響列表中的其他項目。 – Nikolaj

0

您正在運行視圖回收問題。要了解更多信息,請參閱this question的答案。在你的情況下,最容易做的事情就是使用則傳遞到您的onClick方法的觀點:

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