【发布时间】:2016-11-25 16:27:50
【问题描述】:
我有一个包含项目的 listView,其中一个项目被突出显示。
当他们点击一个项目时,我希望突出显示的卡片不再被突出显示,而新项目被突出显示。
到目前为止我做了什么。
我用列表调用适配器,列表中的一项是defaultItem,它是true还是false。
当调用 getView 时,我有一个 if defaultItem,并且我对该项目的 UI 进行了更改。我还将该项目保存在名为 currentDefaultItem 的类变量中。
现在,当他们单击时,我可以更改列表,以便旧突出显示的项目为 false,单击的项目为 true。然后我调用 notifyDataSetChanged(); 但这似乎不起作用。
节目getView
@Override
public View getView(final int position, View v, ViewGroup parent) {
ViewHolder holder;
Card card = getItem(position);
if (v == null) {
v = mInflater.inflate(R.layout.row_cards, parent, false);
holder = new ViewHolder();
holder.tvName = (TextView) v.findViewById(R.id.tvName);
holder.tvBrand = (TextView) v.findViewById(R.id.tvBrand);
holder.tvLastFour = (TextView) v.findViewById(R.id.tvLastFour);
holder.tvCounter = (TextView) v.findViewById(R.id.tvCounter);
holder.tvCard = (ImageView) v.findViewById(R.id.tvCard);
holder.arrow = (ImageView) v.findViewById(R.id.arrow);
holder.tick = (ImageView) v.findViewById(R.id.tick);
if (card.getDefaultcard().intValue()==(1)){
holder.tick.setVisibility(View.VISIBLE);
positionOfDefault=position;
}
String brand = card.getBrand();
switch (brand.toLowerCase()){
case "visa":
holder.tvCard.setImageResource(R.drawable.visa2);
break;
case "mastercard":
holder.tvCard.setImageResource(R.drawable.mastercardx2);
break;
case "diners":
holder.tvCard.setImageResource(R.drawable.dinersclub2);
break;
case "amex":
holder.tvCard.setImageResource(R.drawable.americanexpress2);
break;
case "jcb":
holder.tvCard.setImageResource(R.drawable.jcg2);
break;
case "discover":
holder.tvCard.setImageResource(R.drawable.discover);
break;
}
holder.b_delete_in_list = (Button) v.findViewById(R.id.b_delete_in_list);
holder.b_delete_in_list.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
deleteCard(position);
}
});
holder.b_set_default = (Button) v.findViewById(R.id.b_set_default);
holder.b_set_default.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
updatePaymentMethod(position);
}
});
//
v.setTag(holder);
//
} else {
holder = (ViewHolder) v.getTag();
}
holder.tvName.setText(cardList.get(position).getName().toUpperCase());
holder.tvBrand.setText(cardList.get(position).getBrand().toUpperCase());
holder.tvLastFour.setText(cardList.get(position).getLast_four_digits());
return v;
}
【问题讨论】:
-
从适配器的 getView 方法中粘贴代码。
-
好的编辑问题
-
currentDefaultItem 变量在哪里?
-
为了简单起见,我在解释时更改了一些名称,defaultItem 是 defaultCard,它不是布尔值,而是等于 1 或 0 的 int
-
点击时你的值有变化吗?你检查好了没有?