1

我想在 String 数组中获取已检查的项目列表。我已经将 videoList 作为列表视图,并且我已经用它实现了基本适配器并覆盖了 baseadapter 并使用复选框对其进行了自定义。
我已经尝试过了,但它给出了 nullpointerexception。

btnplay.setOnClickListener(new View.OnClickListener() 
    {
        SparseBooleanArray sparseBooleanArray = videolist.getCheckedItemPositions();

        @Override
        public void onClick(View v)
        {

            for(int i =0 ; i<videolist.getCount();i++)
            {

                if(sparseBooleanArray.get(i))
                {

                    String str = (String) videolist.getItemAtPosition(sparseBooleanArray.keyAt(i));
                    Toast.makeText(getBaseContext(),str , 3).show();
                }
            }


        }
    });


public class VideoAdapter extends BaseAdapter
{
    private Context vContext;
    public VideoAdapter(Context c) 
    {
        vContext = c;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return count;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {

        System.gc();
        LayoutInflater inflater = (LayoutInflater) vContext.getSystemService(vContext.LAYOUT_INFLATER_SERVICE);
        View view;
        CheckBox cb;
                String id = null;
        if (convertView == null) 
        {
            view = new View(vContext);  

            view = inflater.inflate(R.layout.row, null);

            cb = (CheckBox) view.findViewById(R.id.checkBox1);


            video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID);

            videocursor.moveToPosition(position);


            video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);

            videocursor.moveToPosition(position);

            id = videocursor.getString(video_column_index);

            video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);

            videocursor.moveToPosition(position);

            id += " Size(KB):" + videocursor.getString(video_column_index);

            cb.setText(id);
        } else
              view = convertView;
        return view;
}
4

3 回答 3

1

您在这里覆盖了很多重要的函数,并且没有给它们任何实现。

例如,您有:

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

ListView当你总是返回时,你怎么能检索到一个项目null

也许您正在寻求扩展一个更完整的适配器实现。尝试ArrayAdapter在不覆盖方法的情况下使用,例如getItem使用空实现。您可以轻松搜索如何使用ArrayAdapter.

于 2012-08-04T07:12:02.350 回答
1

试试这个。

yourCheckBox.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                if (cb.isChecked() == true) {
                    String getString = yourCheckBox.get(position).getText; //Here you will get text of checkbox
                    yourList.add(getString);    // Here you have to add your string value to list.                

                }                   
            }
        });
于 2012-08-04T07:14:33.890 回答
0

默认情况下,列表视图的选择模式设置为 CHOICE_MODE_SINGLE,因此您需要将选择模式设置为单个或多个,以便 getCheckedItemPositoins() 返回非空 SparseBooleanArray。

希望这对某人有帮助!

于 2013-02-09T15:18:55.997 回答