【问题标题】:How to set the size of the array correctly?如何正确设置数组的大小?
【发布时间】:2014-03-22 16:23:54
【问题描述】:

我无法设置数组 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;
}

所以我有一个类型为传输 typeOfTransport[] 的数组,我将它的大小设置为它从服务器获取的类型的大小。此外,对于每种类型的传输,我都会从服务器获得一个“代码”,它是特定传输类型的代码。所以我想向用户显示带有复选框的对话框,让他选择他想要检查的内容并将传输的“代码”放在数组 SelectedModes 中。但是我收到一个错误,我将 NULL 值发送回 XML 服务器。我猜问题是数组太大了,我只把值放在已经检查过的位置。那么您能告诉我如何将数组的大小设置为与已选中的框一样大,并在数组中设置正确的“代码”值。

【问题讨论】:

  • 使用 ArrayList 而不必担心它的大小 :)
  • 但是 XMLRPC 服务器接受字符串数组会有问题吗?
  • 你能告诉我你的意思吗,因为我不明白该怎么做?

标签: android arrays checkbox size


【解决方案1】:

如果您只需要发送已选中的方框,您可以使用位掩码
这是一个整数值,其中每个复选框都是二进制数中的一个数字。
所以,第一个是 1,第二个是 2,第三个是 4,依此类推……

当您选中或取消选中该框时,您将设置或取消设置它的值。
因此,如果选中第一个和第三个复选框,您将添加 1 (0001) 和 4 (0100) 并得到 5 (0101)。 另一方面,您将收到这个 int 并“解码”它。

查看using bitmasks in Java上的示例

【讨论】:

  • 开发的基础... ;)
猜你喜欢
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
相关资源
最近更新 更多