【问题标题】:Get value from spinner and put it into an array in Android从微调器中获取值并将其放入 Android 中的数组中
【发布时间】:2017-09-27 20:55:55
【问题描述】:

我正在尝试使用 Spinner 创建一个下拉菜单,用户可以在其中选择一个数字。然后用户点击的数字将被放入一个数组中,程序将计算数组内的总数。但它不能将所选项目添加到数组中。我浏览了很多文章;但是,我找不到解决方案。

这是我的代码:

更新:我能够找出将所选项目放入数组列表的解决方案,但我无法获得数组中总项目的结果。

    public class MainActivity extends AppCompatActivity {
        //Declare an array to store units
        public static ArrayList<Double> unitsAdd = new ArrayList<Double>();
        //Declare spinner
        Spinner spinner;
        //Declare adapter to connect array in string value
        ArrayAdapter<CharSequence> adapter;
        //
        Double num1, totalUnits;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            spinner = (Spinner) findViewById(R.id.spinner);

            adapter = ArrayAdapter.createFromResource(MainActivity.this, R.array.units,
                    android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            //display the adapter contain the list
            spinner.setAdapter(adapter);

            //delcare buttons
            Button bntInsert = (Button) findViewById(R.id.bntInsert);
            Button bntCount = (Button) findViewById(R.id.bntCount);
            //Declare textView
            final TextView resultTotalUnits = (TextView) findViewById(R.id.resultTotalUnits);
            //Insert function
            bntInsert.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    /*Removed This line of codes
               spinner.setOnItemSelectedListener(new 
               AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> list, View view, int position, long id) {
                            //define selected unit. I am missing something right here
                            String unitSelected = spinner.getSelectedItem().toString();
                            //convert string to double
                            num1 = Double.parseDouble(unitSelected);
                            //add to array but it does not work
                            unitsAdd.add(num1);
                            Toast.makeText(getApplicationContext(),
                                    "You have inserted: " + num1 + " units",
                                    Toast.LENGTH_SHORT).show();

                        }

                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {

                        }
                    });*/
//Added these
String unitSelected = spinner.getSelectedItem().toString();
                num1 = Double.parseDouble(unitSelected);
                unitsAdd.add(num1);
Toast.makeText(getApplicationContext(),
                       "You have inserted: " + unitsAdd + " units",
                       Toast.LENGTH_SHORT).show();
                }
            });
    //When clicking the button, the app stopped working
           bntCount.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   for(int i=0;i<unitsAdd.size();i++){
                       //sum of the array called units
                       totalUnits =  (unitsAdd.get(i)) + totalUnits;
                   }
                   //Display the results in the TextView sections
                   resultTotalUnits.setText("Total units :"+Double.toString(totalUnits));
               }
           });

        }
    }

【问题讨论】:

  • 您到底在哪里遇到问题?
  • 无法将选中的项目(用户点击插入按钮时选择的项目)添加到数组中。
  • 试试String unitSelected = list.getItemAtPosition(position).toString()
  • 对不起,我试过了。 Tt 不工作。谢谢。
  • 好吧,我建议你先看一行。首先,确保 unitSelected 得到正确的字符串值,然后如果它被正确解析,等等......

标签: java android arrays spinner


【解决方案1】:

错误在这一行

String unitSelected = spinner.getSelectedItem().toString();

微调器不保存所选值,AdapterViewonSelected() 函数的参数之一)保存所选值。

将该语句更改为

String unitSelected = list.getSelectedItem().toString();

编辑:

我认为实施有些错误。试试这个:

  1. 声明一个静态双精度变量,它将保存微调器选择的值。

  2. 然后为 Spinner 实现一个普通的适配器。每次选择 Spinner 时,都会在适配器中获取该值并将其存储在静态变量中。

  3. 单击按钮时,从静态变量中获取值并将其添加到ArrayList

示例代码:

Static Double selectedDouble;

spinner.setOnItemSelectedListener(myListener);
AdapterView.OnItemSelectedListener myListener = new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                String item = adapterView.getItemAtPosition(i).toString();
                selectedDouble = Double.parseDouble(item);
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {
            adapterView.setSelection(0);
            selectedDouble = Double.parseDouble("Some Default Value");

        }
    };

btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
             DoubleArray.add(selectedDouble);
        }

        });

在对其执行任何操作之前,将变量 totalUnits 初始化为 0。最好在onCreate()

totalUnits = 0.00;

【讨论】:

  • 感谢您的回答。我已经尝试过了;但是,它没有向数组中添加任何内容,它只是选择了该项目;加上它在不单击插入按钮 (bntInsert) 的情况下选择了该项目。
  • @TanDo 您的Toast 是否显示您正确选择的值? onItemSelected() 将在微调器加载时自动执行。
  • 我已经想出了将项目添加到数组中的解决方案。通过删除这行代码 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { ...};
  • 这行代码就是一个解决方案 String unitSelected = spinner.getSelectedItem().toString(); num1 = Double.parseDouble(unitSelected); unitsAdd.add(num1); Toast.makeText(getApplicationContext(), "您已插入:" + unitsAdd + "units", Toast.LENGTH_SHORT).show();但是数组中的计数总单位不起作用(最后一个函数)。
  • 哇,你太棒了。问题解决了。万分感谢。我真的很感激。
【解决方案2】:

删除这个不需要的调用:

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

相反,在这里传递android.R.layout.simple_spinner_dropdown_item

adapter = ArrayAdapter.createFromResource(MainActivity.this, R.array.units,
            android.R.layout.simple_spinner_dropdown_item);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多