0

チェックボックスを付けたカスタムlistviewを作成しています。アダプタを拡張するカスタムアダプタクラスを作成しました。これらのチェックボックスの値をアダプタクラスの配列に格納しています。arraylistの名前はitemnameです(customadapterクラスの下部に表示されます)。この配列リストをアクティビティに送信したいと思います(これらの値をデータベースに保存するため)。配列アダプタクラスを拡張しているため、使用できませんsharedpreferences。この問題を解決できますか?私のアダプタークラスは以下の通りです。

    public class CustomArrayAdapter extends ArrayAdapter<Model> {

        protected static final String MODE_PRIVATE = null;
        private final List<Model> list;
        private final Activity context;


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

        static class ViewHolder {
            protected TextView mText;
            protected CheckBox mCheckbox;

            public string getItemAtPosition(int i) {
                // TODO Auto-generated method stub
                return null;
            }
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = null;
            if (convertView == null) {

                final ArrayList<String> itemname = new ArrayList<String>();
                LayoutInflater inflator = context.getLayoutInflater();
                view = inflator.inflate(R.layout.customlistlayout, null);
                final ViewHolder viewHolder = new ViewHolder();
                viewHolder.mText = (TextView) view.findViewById(R.id.settings_label);
                viewHolder.mCheckbox = (CheckBox) view.findViewById(R.id.check);

                Activity activity = new SettingsActivity();
                viewHolder.mCheckbox.setOnCheckedChangeListener(activity);
                viewHolder.mCheckbox
                        .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                            @Override
                            public void onCheckedChanged(CompoundButton buttonView,
                                    boolean isChecked) {
                                Model element = (Model) viewHolder.mCheckbox
                                        .getTag();  

                                element.setSelected(buttonView.isChecked());
                                **itemname.add(element.getName());**





                            }
                        });
                for (String myValue : itemname) {
                    System.out.println(myValue);
                }
                view.setTag(viewHolder);
                viewHolder.mCheckbox.setTag(list.get(position));
            } else {
                view = convertView;
                ((ViewHolder) view.getTag()).mCheckbox.setTag(list.get(position));
            }
            ViewHolder holder = (ViewHolder) view.getTag();
            holder.mText.setText(list.get(position).getName());
            holder.mCheckbox.setChecked(list.get(position).isSelected());
            return view;
        }
    }

アクティビティからこのアダプタクラスを以下のように呼び出しています

ArrayAdapter<Model> settingsadapter = new CustomArrayAdapter(this, getModel()); setListAdapter(settingsadapter);
4

1 に答える 1

0

まず、アクティビティの空のコンストラクターを作成します。お気に入り

public class MyActivity extends Activity{
    public MyActivity ()
        {

        }

次に、ArrayList 値をデータベースにダンプできる ArrayList 引数を使用して、このアクティビティで 1 つの関数を作成します。

public void save_to_database(ArrayList<String> itemname)
{
 // your code for save values in database...
}

アクティビティからこのコンストラクターを呼び出します。

settingsadapter = new settingsadapter(getBaseContext(), list, MyActivity.this);

次に、アダプタでアクティビティのオブジェクトを作成します。

public class CustomArrayAdapter extends ArrayAdapter<Model> {

MyActivity mMyActivity;

次に、次のようなアクティビティを持つアダプターのコンストラクターを作成します

public CustomArrayAdapter(Activity context, List<Model> list, MyActivity mActivity)
    {
      this.mMyActivity = mActivity;
    }

これで、アダプター内のアクティビティのすべてのメソッドにアクセスできるようになりました。必要に応じて、ArrayList をアクティビティのメソッド (そのリストをデータベースにダンプします) に渡します。

mMyActivity.save_to_database(Your ArrayList);

これがあなたを助けることを願っています。

ありがとう...

于 2012-04-04T05:44:52.487 に答える