我有一个listView持有项目,其中一个项目突出显示。
当他们点击某个项目时,我希望不再突出显示突出显示的卡片,并突出显示新项目。
到目前为止我做了什么。
我用一个列表调用适配器,列表中的一个项是defaultItem,它是true或false。
当getView被调用时,我有一个if defaultItem,并且我对这些项目的UI进行了更改。我还将该项保存在名为currentDefaultItem的类变量中。
现在,当他们点击时,我可以更改列表,以便旧的突出显示的项目为false,点击的项目为true。然后我调用notifyDataSetChanged(); 但这似乎不起作用。
show 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;
}
答案 0 :(得分:1)
问题是你的else语句没有更新视图。使用适配器,您的视图将加载适合屏幕的项目的最大数量,这些项目将为null,因此它会命中第一个if语句,因为开始视图为空。然后,一旦你更新这些视图不再是null。所以你必须在else语句中更改View属性。
答案 1 :(得分:1)
您管理默认项目的代码:
if (card.getDefaultcard().intValue()==(1)){
holder.tick.setVisibility(View.VISIBLE);
positionOfDefault=position;
}
必须不在 if(view == null)中,因为 if(view == null)中的代码只运行1,所以当您更改默认值时代码永远不会再运行。
答案 2 :(得分:1)
试试这个
@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);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
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);
}
});
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;
}