2012-04-03 88 views
0

我想将适配器类中的列表(itemvalue)的值传递给activity。由于我扩展了arrayadapter类而不是Activity,因此我无法使用sharedpreference。我采取这一数值到一个listener.Here内的ArrayList(ITEMNAME)是,我有tried.Can谁能帮我解决这个代码....如何将值从anadapter类传递到活动

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; 
    } 
} 
+0

'CustomArrayAdapter'从那里你调用这个类从我的意思mainActivity>? – 2012-04-03 13:57:16

+0

实现CustomArrayAdapter.getList()方法以返回封装的ArrayList,然后在需要获取活动中的ArrayList时调用它。 – yorkw 2012-04-03 21:59:04

回答

0

您的活动正在创建CustomArrayAdapter内。例如

myAdapter = new CustomArrayAdapter(); 

然后覆盖活动内部的setOnListItemClick()

+0

我打电话arrayadapter类如下.ArrayAdapter settingsadapter = new CustomArrayAdapter(this, \t \t \t getModel()); \t setListAdapter(settingsadapter); – 2012-04-03 13:54:20

+0

活动内部?如果是这样,只需@Override \t保护无效onListItemClick(列表视图l,查看v,int位置,长ID)在您的活动。 – pouzzler 2012-04-03 14:38:05

0

尝试以下步骤:

  1. 创建界面
  2. 带适配器绑定界面,同时调用构造函数类
  3. 实现在活动界面上的一些看法事件通过接口的方法来活动
  4. 将数据传递适配器。
0

创建像

public interface OnTaskDone{ 
    void onTaskComplete(Model model); 
} 

接口添加一个方法类似

public void setOnTaskDone(OnTaskDone onTaskDone){ 
    this.onTaskDone = onTaskDone; 
} 

而且在检查变更

@Override 
public void onCheckedChanged(CompoundButton buttonView, 
          boolean isChecked) { 
      Model element = (Model) viewHolder.mCheckbox 
           .getTag(); 
      onTaskDone.onTaskDone(element); 
      element.setSelected(buttonView.isChecked()); 
      **itemname.add(element.getName());* 

} 
相关问题