2016-07-21 116 views
1

我有一个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; 
} 
+0

粘贴代码。 –

+0

好的编辑问题 –

+0

其中是currentDefaultItem变量? –

回答

1

尝试在适配器从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); 

     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; 
} 
1

的问题是,你的else语句没有更新的意见。使用适配器,您的视图将加载适合屏幕的项目的最大数量,它们将为空,因此它会触击第一个if语句,因为开始视图为空。那么一旦你更新这些视图不再为空。所以你必须改变else语句的View属性。

1

你的代码是管理默认项:

if (card.getDefaultcard().intValue()==(1)){ 
     holder.tick.setVisibility(View.VISIBLE); 
     positionOfDefault=position; 
    } 

一定要在别人不如果(查看== NULL)因为如果(查看== NULL)运行唯一的代码,所以当你改变默认你的代码从不再运行。