2016-07-21 83 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)運行唯一的代碼,所以當你改變默認你的代碼從不再運行。