从多选ListView返回值

2024-02-11

编辑:好的,我找到了解决方案。不知道这是正确的解决方案,但它确实可以正常工作。添加到下面的代码中。

我试图允许用户从清单中选择多个目录,并在单击“提交”按钮后返回它们。这是我的代码片段。它使用 /sdcard/ 上的所有目录填充 ListView,并且对于提交时的初始选择(无论我选择多少目录),日志都会显示返回的正确选择。但是,如果我取消选中某个项目,然后再次单击“提交”,它仍然显示好像所有项目都被选中。我需要编写一个处理程序来取消选中某个项目吗?我认为这是通过 choiceMode 选择来解决的?谢谢!

private SparseBooleanArray a;    
directoryList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, directoryArray));
    submitButton = (Button)findViewById(R.id.submit_button);
    submitButton.setOnClickListener(new OnClickListener()
        {
        @Override
        public void onClick(View v)
        {
            a = new SparseBooleanArray();
            a.clear();
            a = directoryList.getCheckedItemPositions();

            for (int i = 0; i < a.size(); i++)
            {
                //added if statement to check for true. The SparseBooleanArray
                //seems to maintain the keys for the checked items, but it sets
                //the value to false. Adding a boolean check returns the correct result.                    
                if(a.valueAt(i) == true)
                    Log.v("Returned ", directoryArray[a.keyAt(i)]);

            }                
        }
    });

进行了更多调试并找到了适合我的解决方案。编辑成上面的代码。由于某种原因,SparseBooleanArray 本身并没有清空;它维护已检查的框的密钥。然而,当调用 getCheckedItemPositions() 时,它将 VALUE 设置为 false。所以键仍然在返回的数组中,但它的值为 false。只有选中的框才会被标记为 true 值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从多选ListView返回值 的相关文章

随机推荐