设置数组selectedmodes的大小时遇到问题。我有一个对话框复选框,我想发送有关哪些框已被选中的信息。

private boolean transportDialog()
{
    String[] typeOfTransport;

    typeOfTransport = new String[modes.length];
    SelectedModes = new String[modes.length];
    final boolean[] itemsChecked = new boolean[modes.length];
    for (int i = 0; i < modes.length; i++)
    {
        typeOfTransport[i] = modes[i].Name;

        if (modes[i].Selected == true)
        {
            itemsChecked[i] = true;
        }
    }

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
    dialogBuilder.setTitle("Select your transport:");
    dialogBuilder.setMultiChoiceItems(typeOfTransport, itemsChecked, new DialogInterface.OnMultiChoiceClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked)
        {
            itemsChecked[which] = isChecked;
        }
    });

    dialogBuilder.setPositiveButton("Set", new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            String selectetdVal = " ";

            for (int i = 0; i < modes.length; i++)
            {
               if (itemsChecked[i])
               {
                 SelectedModes[i] = modes[i].Code;
                 selectetdVal = selectetdVal + modes[i].Name + " ";
                 itemsChecked[i]=false;
               }
            }

            //textBox2.setText(selectetdVal);
            try
            {
                mXmlRpcClient.call(mSetModesFunc, mSessionID, SelectedModes);
            } catch (XMLRPCException e)             {

                e.printStackTrace();
            }
            Toast.makeText(MainWindow.this, selectetdVal,Toast.LENGTH_SHORT).show();
        }

    });

    AlertDialog alertDialog = dialogBuilder.create();
    alertDialog.show();
    return true;
}

因此,我有一个类型为transport typeoftransport[]的数组,并将其大小设置为从服务器获取的类型的大小。另外,对于每种类型的传输,都有一个“代码”,这是我从服务器获取的特定类型传输的代码。因此,我想向用户显示带有复选框的对话框,允许他选择要检查的内容,并将传输的“代码”放入数组selectedmodes中。但是我得到一个错误,我将空值发送回xml服务器。我猜问题是数组太大了,我只把值放在已经检查过的位置。所以你能告诉我如何将数组的大小设置为和选中的框一样大,并在数组中设置正确的“代码”值吗?

最佳答案

如果你只需要发送哪个盒子已经检查过了,你可以使用一个小面具。
它是一个整数值,其中每个复选框都是二进制数中的一个数字。
所以,第一个是1,第二个是2,第三个是4等等…
选中或取消选中该框时,将设置或取消设置其值。
所以,如果第一个和第三个复选框被选中,您将添加1(0001)和4(0100)并得到5(0101)。
在另一边,你将收到这个int并“解码”它。
查看using bitmasks in Java上的示例

10-07 12:04
查看更多