【发布时间】:2018-11-04 05:17:09
【问题描述】:
我正在创建一个电子商务应用程序以在 listView 中显示产品列表。 每个列表项都有一个标题、图像和按钮,分别命名为喜欢、不喜欢和最喜欢的。
当用户按下特定列表项上的点赞按钮时,按钮的图像应更改为“点赞”并调用特定的 API。我已经使用 ArrayAdapter 类在 getView() 方法内的 onClickListener 中完成了此操作。
像这样。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item, parent, false);
likeButton= (Button)
listItemView.findViewById(R.id.like_button);
//likeButton.setClickable(currentProduct.getmLikeButton());
dislikeButton = (Button)
listItemView.findViewById(R.id.dislike_button);
favoritesButton = (Button)
listItemView.findViewById(R.id.favorite_button);
}
TextView productNameView = (TextView)
listItemView.findViewById(R.id.product_name);
ImageView productImageView = (ImageView)
listItemView.findViewById(R.id.product_image);
currentProduct = getItem(position);
likeButton.setTag(position);
dislikeButton.setTag(position);
favoritesButton.setTag(position);
likeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position=(Integer)v.getTag();
currentProduct = getItem(position);
productId = currentProduct.getProductId();
likeButton = (Button) v.findViewById(R.id.like_button);
Uri baseUri = Uri.parse(UNBXD_UACTION);
Uri.Builder uriBuilder = baseUri.buildUpon();
uriBuilder.appendQueryParameter("uaction", "like");
uriBuilder.appendQueryParameter("user", "8222");
uriBuilder.appendQueryParameter(PRODUCT_ID,productId);
uriBuilder.appendQueryParameter(MATERIALL, "true");
//uriBuilder.appendQueryParameter(USER_ID, "5");
uriBuilder.appendQueryParameter(UNDO, "false");
Intent intent = new
Intent(Intent.ACTION_WEB_SEARCH, uriBuilder.build());
intent.getData();
likeButton.setBackgroundResource(R.drawable.liked);
Log.v("liked url is ", uriBuilder.toString() + " " +
String.valueOf(position));
}
});
我注意到的问题是,如果我单击 listView 中第一个项目上的点赞按钮,不仅第一个项目的点赞按钮会更改为“喜欢”,而且每隔三个 listView 项目中的点赞按钮也会变为显示更改为“喜欢”,但 API 调用只发生一次,并且正确地适合所单击的项目。
我无法准确弄清楚每三个项目的点赞按钮是如何以及为什么从我实际按下的点赞按钮开始被按下的,但(幸运的是)只有一个并且正确的 API 被调用。
请帮忙。
【问题讨论】: