0

BaseAdapter からデータを取得する ListView があります。リストビューに、フィールドの表示/非表示を切り替えるトグル ボタンがあります。
リスト ビューで行のトグル ボタンをクリックすると、その特定の行を更新したいだけです。
これが私が試しているコードです。
私を助けてください。どんな助けでも大歓迎です。

public class BankListAdapter extends 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;
}

}

前もって感謝します

4

1 に答える 1

0

2つのapprocaseを使用できます.1)新しいOnItemClickListenerを使用し、そのすべてのリストをバインドします..(あなたのケースではあまりお勧めしません.変更はアダプター内にある必要があります). holder.tgl_atm_pin.setOnClickListener、他の onclick-hook listner になる他のプレースホルダー (任意の種類のビュー) が必要です。

于 2012-12-17T08:55:57.447 に答える