2012-12-17 43 views
0

我有一個ListView從BaseAdapter獲取其數據。我有一個切換按鈕在列表視圖中切換顯示/隱藏的字段。
當我在列表視圖中單擊一行切換按鈕時,我只想更新該特定行。
這是我正在嘗試的代碼。
請幫幫我。任何幫助,將不勝感激。如何處理ListView中的切換點擊?

公共類BankListAdapter延伸BaseAdapter {

private BankClass context; 
private ArrayList<BankDetail> bank; 
private LayoutInflater l_inflator; 
private ViewHolder holder; 

public BankListAdapter(BankClass context, ArrayList<BankDetail> bank) { 
    this.context = context; 
    this.bank = bank; 
    l_inflator = LayoutInflater.from(context); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return bank.size(); 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return bank.get(position); 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d("Method", "In getView"); 
    if (convertView == null) { 
     convertView = l_inflator 
       .inflate(R.layout.layout_banklistview, null); 
     holder = new ViewHolder(); 
     holder.bank_name = (TextView) convertView 
       .findViewById(R.id.TV_bankNameLabelValue); 
     holder.branch_name = (TextView) convertView 
       .findViewById(R.id.TV_branchNameLabelValue); 
     holder.atm_pin = (TextView) convertView 
       .findViewById(R.id.TV_atmPinLabelValue); 
     holder.acc_no = (TextView) convertView 
       .findViewById(R.id.TV_accNoLabelValue); 
     holder.card_no = (TextView) convertView 
       .findViewById(R.id.TV_atmCardNoLabelValue); 
     holder.tgl_atm_pin = (ToggleButton) convertView 
       .findViewById(R.id.Tgl_atmPin); 
     convertView.setTag(holder); 

     holder.tgl_atm_pin.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       BankDetail bd = bank.get((Integer) v.getTag()); 
       String tempPin = bd.getAtmPin(); 

       Log.d("Checked", bd.getAtmPin()); 
       // TODO Auto-generated method stub 
       if (holder.tgl_atm_pin.isChecked()) { 

        // holder.atm_pin.setText(bd.getAtmPin()); 

        // holder.atm_pin.setTransformationMethod(PasswordTransformationMethod); 
        holder.atm_pin.setInputType(InputType.TYPE_CLASS_TEXT 
          | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
       } else { 
        // holder.atm_pin.setText(tempPin); 
        holder.atm_pin.setInputType(InputType.TYPE_CLASS_TEXT); 
        notifyData(); 
       } 
      } 
     }); 

    } 

    else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    // TODO Auto-generated method stub 

    holder.bank_name.setText(bank.get(position).getBankName()); 
    holder.branch_name.setText(bank.get(position).getBranchName()); 
    holder.atm_pin.setText(bank.get(position).getAtmPin()); 
    if (holder.tgl_atm_pin.isChecked()) { 

     holder.atm_pin.setInputType(InputType.TYPE_CLASS_TEXT 
       | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
    } else { 
     holder.atm_pin.setInputType(InputType.TYPE_CLASS_TEXT); 
    } 
    holder.acc_no.setText(bank.get(position).getAccNo()); 
    holder.card_no.setText(bank.get(position).getAtmCardNo()); 
    holder.tgl_atm_pin.setTag(position); 
    // Log.d("Position", "'"+position+"'"); 

    // holder.tgl_atm_pin 
    // .setOnCheckedChangeListener(new 
    // CompoundButton.OnCheckedChangeListener() { 
    // 
    // @Override 
    // public void onCheckedChanged(CompoundButton buttonView, 
    // boolean isChecked) { 
    // // TODO Auto-generated method stub 
    // if (isChecked) { 
    // holder.atm_pin 
    // .setInputType(InputType.TYPE_CLASS_TEXT 
    // | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
    // 
    // 
    // } else { 
    // holder.atm_pin 
    // .setInputType(InputType.TYPE_CLASS_TEXT); 
    // 
    // } 
    // 
    // } 
    // }); 

    return convertView; 
} 

protected void notifyData() { 
    context.setBankDetails(); 
    context.adapter = new BankListAdapter(context, context.bank_info); 
    context.adapter.notifyDataSetChanged(); 
    context.list.setAdapter(context.adapter); 
} 

static class ViewHolder { 
    TextView bank_name; 
    TextView branch_name; 
    TextView atm_pin; 
    TextView acc_no; 
    TextView card_no; 
    ToggleButton tgl_atm_pin; 
} 

}

在此先感謝

回答

0

您可以使用兩個approcase,1)使用新的OnItemClickListener並綁定上的所有名單。(在你的情況下不推薦這樣做,更改應該在適配器中),2)因爲你正在用holder.tgl_atm_pin.setOnClickListener註冊一個點擊列表器,你將需要其他佔位符(任何類型的視圖)成爲另一個onclick-hook l istner ..