2016-09-21 66 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