正在从与override基本适配器android连接的listview中获取选中的项目



我想在String数组中获得选中项列表。我将videoList作为列表视图,并用它实现了baseadapter和overridebaseadapteer,并用checkbox自定义了它
我已经尝试过了,但它给出了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;
}

您在这里重写了许多重要的函数,但没有给它们任何实现。

例如,您有:

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

当您总是返回null时,如何从ListView中检索项目?

也许您希望扩展适配器的更完整的实现。尝试使用ArrayAdapter而不使用空实现重写方法(如getItem)。你可以很容易地四处搜索如何使用ArrayAdapter

试试这个。

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

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

希望这能帮助到别人!!

最新更新