2

カスタムリストの行に 、、をListActivity持つを作成しようとしています。CheckBoxTextViewEditText

ユーザーの入力を取得し、その行が選択されたEditTextときにその値をデータベースに保存する必要があります。が選択されていないCheckBox場合、は無効になります。後者はできますが、の値を保持してデータベースに保存することはできません。CheckBoxEditTextEditText

現在、何かを入力してEditText戻るボタンを押してキーパッドを最小化するEditTextと、以前の値に戻ります。

ListViewカスタムを表示し、チェックボックスを選択および選択解除するために、今まで以下をコーディングしました。私はちょうどそのEditText部分で私を助ける必要があります.

EditExepense.Java

package h.pkg.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class EditExpense extends ListActivity {
    int eid, tid, mid;
    String etyp,amount;
    float eamt;
    DBAdapter db;
    ArrayList<Integer> memmid = new ArrayList<Integer>();
    ArrayList<String> memname = new ArrayList<String>();
    ArrayList<Float> memcexp = new ArrayList<Float>();  
    List<Model> list = new ArrayList<Model>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button Save = (Button)findViewById(R.id.Save);
        //ListView l1= (ListView)findViewById(R.id.listView1);
        setContentView(R.layout.eexp);
        Bundle idata = getIntent().getExtras();
        db = new DBAdapter(this);

        if (idata !=null)
        {
            eid=idata.getInt("EID");
            tid=idata.getInt("TID");
            etyp=idata.getString("ETYP");
            eamt=idata.getFloat("EXAMT");
            amount = "" + eamt;
        }

        try {
            db.open();
            Cursor c = db.getAllmem(tid);
            float nofm = (float)(c.getCount());
            float evenshareamt = eamt/nofm;
            db.close();

            if (c != null ) {
                if  (c.moveToFirst()) {
                    do {
                        String MN = c.getString(c.getColumnIndex("NAME"));
                        mid = c.getInt(c.getColumnIndex("MID"));
                        String ceamts = String.valueOf(evenshareamt);

                        list.add(get(MN,ceamts,true));

                        memname.add(MN);
                        memmid.add(mid);
                        memcexp.add(evenshareamt);
                    } while (c.moveToNext());
                } 
            }

            c.close();
        } finally {
        }

        ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this,list);
        setListAdapter(adapter);

        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.radioGroup1);
        RadioButton rbs = (RadioButton) findViewById(R.id.Shared);
        RadioButton rbc = (RadioButton) findViewById(R.id.Custom);

        radioGroup.setOnCheckedChangeListener( new OnCheckedChangeListener() {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton rbs = (RadioButton) findViewById(R.id.Shared);

                if (rbs.isChecked()) {
                    //DisplayToast("Option 1 checked!");
                } else {
                    //DisplayToast("Option 2 checked!");
                }
            }
        });
    }    

    public void expUpdate(View V) {
        setResult(RESULT_OK);
        finish();
    }

    private Model get(String memn, String ceam, boolean sel) {
        return new Model(memn,ceam,sel);
    }
}

InteractiveArrayAdapter.Java

package h.pkg.main;
import java.util.List;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;

public class InteractiveArrayAdapter extends ArrayAdapter<Model> {
    private final List<Model> list;
    private final Activity context;

    public InteractiveArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.listview, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView memnames;
        protected EditText ceamount;
        protected CheckBox checkbox;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.listview, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.memnames = (TextView) view.findViewById(R.id.memname1);
            viewHolder.ceamount = (EditText) view.findViewById(R.id.expamt1);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.chkbox1);
            viewHolder.checkbox.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                                                            boolean isChecked) {
                    Model elementc = (Model) viewHolder.checkbox.getTag();
                    elementc.setSelected(buttonView.isChecked());
                    boolean edenable = buttonView.isChecked();
                    if(edenable)
                    {
                        viewHolder.ceamount.setEnabled(true);
                    } else {
                        viewHolder.ceamount.setText("");
                        viewHolder.ceamount.setEnabled(false);
                    }
                }
            });

            view.setTag(viewHolder);
            viewHolder.checkbox.setTag(list.get(position));
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
        }

        ViewHolder holder = (ViewHolder) view.getTag();
        holder.memnames.setText(list.get(position).getName());
        holder.ceamount.setText(list.get(position).getCeamt());
        holder.checkbox.setChecked(list.get(position).isSelected());
        return view;
    }
}

モデル.Java

package h.pkg.main;

public class Model {
    private String name;
    private String ceexpamt;
    private boolean selected;

    public Model(String name, String ceexpamt, boolean selected) {
        this.name = name;
        this.ceexpamt = ceexpamt;
        this.selected = selected;
    }

    public String getName() {
        return name;
    }

    public String getCeamt() {
        return ceexpamt;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setCeamt(String ceamt) {
        this.ceexpamt = ceamt;
    }

    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

    public void enableEditText()
    {

    }
} 
4

3 に答える 3

2

こんにちは、すべての回答に感謝します..しかし、すでにModelクラスを使用しているため...その例自体でタスクを達成しようとしました...変更されたInteractiveArrayAdapter.Javaを参照してください。これは、edittextの値を保持する際に正常に機能します編集後に正しい行に。

このメソッドを追加しました.. InterativeArrayAdapter.java

viewHolder.ceamount.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
                 if (!hasFocus){
                     viewHolder.ceamount.setFocusable(true);
                     Model elemente = (Model) viewHolder.ceamount.getTag();
                     final EditText custamt = (EditText) v;
                     elemente.setCeamt(custamt.getText().toString());
                }
            }
        });

完全なコードについては、以下を参照してください。

package h.pkg.main;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.TextView;

public class InteractiveArrayAdapter extends ArrayAdapter<Model> {

    private final List<Model> list;
    private final Activity context;

    public InteractiveArrayAdapter(Activity context, List<Model> list) {
        super(context, R.layout.listview, list);
        this.context = context;
        this.list = list;
    }

    static class ViewHolder {
        protected TextView memnames;
        protected EditText ceamount;
        protected CheckBox checkbox;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = null;
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            view = inflator.inflate(R.layout.listview, null);
            final ViewHolder viewHolder = new ViewHolder();
            viewHolder.memnames = (TextView) view.findViewById(R.id.memname1);
            viewHolder.ceamount = (EditText) view.findViewById(R.id.expamt1);
            viewHolder.checkbox = (CheckBox) view.findViewById(R.id.chkbox1);
            viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            Model elementc = (Model) viewHolder.checkbox.getTag();
                            elementc.setSelected(buttonView.isChecked());
                            boolean edenable = buttonView.isChecked();
                            if(edenable)
                            {
                            viewHolder.ceamount.setEnabled(true);
                            }
                            else
                            {
                                viewHolder.ceamount.setText("");
                                viewHolder.ceamount.setEnabled(false);
                            }


                        }
                    });

            viewHolder.ceamount.setOnFocusChangeListener(new OnFocusChangeListener() {

                @Override
                public void onFocusChange(View v, boolean hasFocus) {
                    // TODO Auto-generated method stub
                     if (!hasFocus){
                         viewHolder.ceamount.setFocusable(true);
                         Model elemente = (Model) viewHolder.ceamount.getTag();
                         final EditText custamt = (EditText) v;
                         elemente.setCeamt(custamt.getText().toString());
                    }
                }
            });
            view.setTag(viewHolder);
            viewHolder.memnames.setTag(list.get(position));
            //viewHolder.memnames.setId(position);
            viewHolder.checkbox.setTag(list.get(position));
            //viewHolder.checkbox.setId(position);
            viewHolder.ceamount.setTag(list.get(position));
            //viewHolder.ceamount.setId(position);
        } else {
            view = convertView;
            ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
            ((ViewHolder) view.getTag()).memnames.setTag(list.get(position));
            ((ViewHolder) view.getTag()).ceamount.setTag(list.get(position));
        }

        ViewHolder holder = (ViewHolder) view.getTag();
        holder.memnames.setText(list.get(position).getName());
        holder.ceamount.setText(list.get(position).getCeamt());
        holder.checkbox.setChecked(list.get(position).isSelected());
        return view;
      }
}
于 2012-08-03T20:11:47.987 に答える
0

Map は 2 つのデータ型間のリンクであるため、Map from Integer to Boolean は、特定の整数値から対応するブール値 (1 -> true 、2 -> false など) への 1 対 1 の関数です。基本的に、各リスト位置のチェックボックスのステータスへの「マッピング」を維持できます。したがって、Java で Map を実装する方法は次のとおりです。

Map<Integer,Boolean> listMap = new HashMap<Integer,Boolean>();

1 つのリスト要素からブール値ステータスへのマッピングを追加する場合は、次のコードを使用する必要があります。

listMap.put(yourListPositionInIntValue, statusOfCheckboxInTrueOrFalse);

マップのブール値を変更する場合は、同じ ListPosition と更新されたブール値を使用して上記のコード行を繰り返すだけです。

于 2012-08-03T09:52:15.393 に答える
0

In your adapter , use Map<Integer,Boolean> and Map<Integer,String> to store the status of checkbox and the value of editText

于 2012-08-03T09:19:49.600 に答える