Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在类型ArrayList中添加(字符串)的方法<;字符串>;不适用于参数(列表)_Android_Checkbox - Fatal编程技术网

Android 在类型ArrayList中添加(字符串)的方法<;字符串>;不适用于参数(列表)

Android 在类型ArrayList中添加(字符串)的方法<;字符串>;不适用于参数(列表),android,checkbox,Android,Checkbox,当我在android中将带有复选框的自定义listview中的选定项添加到arraylist时,该行中显示了一个错误 selectedItems.add(adapter.getItem(position)); 类型ArrayList中的方法add(String)不适用于参数(列表) 这是我的密码 public class HomePage extends Activity { private ListView listView1; ListAdapter adapter; @Overri

当我在android中将带有复选框的自定义listview中的选定项添加到arraylist时,该行中显示了一个错误

selectedItems.add(adapter.getItem(position));
类型ArrayList中的方法add(String)不适用于参数(列表)

这是我的密码

  public class HomePage extends Activity {
private ListView listView1;
ListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);

    List device_data[] = new List[]
                {
        new List(R.drawable.ic_pic , "DCIM"),
        new List(R.drawable.ic_pic, "Videos"),
        new List(R.drawable.ic_pic, "Music"),
        new List(R.drawable.ic_pic, "Mobile Uploads"),
        new List(R.drawable.ic_pic, "Personal Folder")

                     };



    ListAdapter adapter = new ListAdapter(this,  R.layout.list_viewrow, device_data);

        listView1 = (ListView)findViewById(R.id.listView1);

       View header =      (View)getLayoutInflater().inflate(R.layout.listview_header, null);
       listView1.addHeaderView(header);

       listView1.setAdapter(adapter);

       Log.i("check box status", ""+ListAdapter.ListHolder.class);


       }
   private class ListAdapter extends ArrayAdapter<List> {
    Context context; 
      int layoutResourceId;   
      boolean checkvalue;
       List data[] = null;

    public ListAdapter(Context context, int layoutResourceId, List[] data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        final ListHolder holder;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new ListHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
            holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
            holder.checkbox=(CheckBox) row.findViewById(R.id.check);
            holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {

                    //Log.i("clicked", ""+holder.checkbox.isChecked());
                    checkvalue=holder.checkbox.isChecked();
                     if(checkvalue=holder.checkbox.isChecked()==true){
                        startNewActivity();
                    }
                }


              });

            row.setTag(holder);
        }
        else
        {
            holder = (ListHolder)row.getTag();
        }

        List list = data[position];
        holder.txtTitle.setText(list.title);
        holder.imgIcon.setImageResource(list.icon);

        return row;
    }


    class ListHolder
    {
        ImageView imgIcon;
        TextView txtTitle;
        CheckBox checkbox;
    }
     private void startNewActivity() {

             Button btn= (Button)findViewById(R.id.add);
             btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                         SparseBooleanArray checked = listView1.getCheckedItemPositions();
                        final ArrayList<String> selectedItems = new ArrayList<String>();

                         for (int i = 0; i < checked.size(); i++) {
                             // Item position in adapter
                             int position = checked.keyAt(i);


                             if (checked.valueAt(i))
                                             **selectedItems.add(adapter.getItem(position));**
                         }
                        String[] outputStrArr = new String[selectedItems.size()];

                        for (int i = 0; i < selectedItems.size(); i++) {
                            outputStrArr[i] = selectedItems.get(i);
                        }
                        Intent intent = new Intent(getApplicationContext(),
                               CheckedValues.class);
                         Bundle b = new Bundle();
                         b.putStringArray("selectedItems", outputStrArr);


                         intent.putExtras(b);
                        startActivity(intent);
                    }
                });
             Toast.makeText(getApplicationContext(), "clicked View "+checkvalue, Toast.LENGTH_SHORT).show();
        }

}
公共类主页扩展活动{
私有列表视图列表视图1;
列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u主页);
列表设备_数据[]=新列表[]
{
新列表(R.drawable.ic_pic,“DCIM”),
新列表(R.drawable.ic_图片,“视频”),
新列表(R.drawable.ic_图,“音乐”),
新列表(R.drawable.ic_pic,“移动上传”),
新列表(R.drawable.ic_pic,“个人文件夹”)
};
ListAdapter=新ListAdapter(此,R.layout.list\u视图行,设备\u数据);
listView1=(ListView)findViewById(R.id.listView1);
视图标题=(视图)GetLayoutFlater()。充气(R.layout.listview_标题,null);
listView1.addHeaderView(标题);
listView1.setAdapter(适配器);
Log.i(“复选框状态”,“”+ListAdapter.ListHolder.class);
}
私有类ListAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
布尔校验值;
列表数据[]=null;
公共ListAdapter(上下文上下文,int-layoutResourceId,列表[]数据){
超级(上下文、布局资源ID、数据);
this.layoutResourceId=layoutResourceId;
this.context=上下文;
这个数据=数据;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
最终名单持有人;
if(行==null)
{
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新的ListHolder();
holder.imgIcon=(ImageView)row.findViewById(R.id.imgIcon);
holder.txtTitle=(TextView)row.findViewById(R.id.txtTitle);
holder.checkbox=(checkbox)row.findViewById(R.id.check);
setOnCheckedChangeListener(newcompoundButton.OnCheckedChangeListener()){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
//Log.i(“单击的”),“+holder.checkbox.isChecked());
checkvalue=holder.checkbox.isChecked();
if(checkvalue=holder.checkbox.isChecked()==true){
startNewActivity();
}
}
});
row.setTag(支架);
}
其他的
{
holder=(ListHolder)行。getTag();
}
列表=数据[位置];
holder.txtTitle.setText(list.title);
holder.imgIcon.setImageResource(list.icon);
返回行;
}
类列表持有者
{
ImageView imgIcon;
TextView-txtTitle;
复选框;
}
私有void startNewActivity(){
按钮btn=(按钮)findViewById(R.id.add);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
SparseBooleanArray checked=listView1.GetCheckEditePositions();
final ArrayList selectedItems=new ArrayList();
对于(int i=0;i
}


提前感谢

我假设错误在这一行:

selectedItems.add( adapter.getItem(position));
您已经声明了适配器来管理
列表
对象数组。您将
selectedItems
声明为
ArrayList
。不能将类型为
List
的对象添加到需要
String
元素的
ArrayList
。您可能需要以下内容:

selectedItems.add((String) adapter.getItem(position).get(1));
请注意,最好声明聚合类:

class Data {
    int resourceId;
    String name;
}

这样,编译器就可以强制执行类型安全,在访问列表元素时就不必强制转换。您还可以消除资源ID的自动装箱。

您的错误发生在这一行

selectedItems.add( adapter.getItem(position));
您的项目是您自己的列表项目,因此您无法将其添加到
ArrayList


干杯

您至少可以为我们突出显示这一行,省得阅读一百行不相关的代码。您不明白什么?(我想添加
。title
可以解决问题,但不知道您想做什么并不明显)谢谢您的帮助,有没有其他方法可以将所选项目添加到arraylist中?我现在不知道您的List类,但您可以创建一个
toString