2012-04-04 2 views
0

Я создаю пользовательский listview, в котором я установил флажок. Я создал специальный класс адаптера, расширяющий адаптер. Я сохраняю значения этих флажков в массиве в классе адаптера. Имя arraylist - itemname (вы можете увидеть его в нижней части класса customadapter). Я хочу отправить этот arraylist в действие (с целью хранения этих значений в базе данных). Поскольку я расширяю класс адаптера массива, я не могу использовать sharedpreferences. Может решить эту проблему? Мой класс адаптера приведен ниже.Как передать arraylist из класса, расширяющего arryadapter, к действию

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); 

ответ

0

Сначала сделайте пустой конструктор для вашей деятельности. например

public class MyActivity extends Activity{ 
    public MyActivity() 
     { 

     } 

Затем сделайте одну функцию в этом действии с аргументом ArrayList, который может сбросить значение ArrayList в базу данных.

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); 

Надеется, что это поможет вам.

С благодарностью ...

Смежные вопросы