【问题标题】:How the spinner items not be kept selected as it is while rerunning the app重新运行应用程序时如何不保持选择微调器项目
【发布时间】:2016-08-06 08:56:19
【问题描述】:

您好,我想知道如何在整个活动中保持选择的微调器项目,以便如果我从其他活动返回到由微调器组成的活动,它仍然保持选中状态。

我使用的上述语句在此之后已解决,还有另一个问题是,每当我重新启动我的应用程序时,其所选部分仍然保持原样,我想知道我能做什么,以便微调器不显示我之前选择了什么

我有一个微调器代码,我想在所有活动中保持选中它,

daySelection = (Spinner)findViewById(R.id.daypreferance);
        //String[] dayName = new String[]{
          //      "sunday", "monday", "tuesday" 
        //};

        MyClass[] dayName ={

                new MyClass("sunday", ""),
                new MyClass("monday", "2"),
                new MyClass("tuesday", "3")



        };
        ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(this , R.layout.spinner_items ,R.id.spinneritem,dayName);
        adapter.setDropDownViewResource(R.layout.spinner_items);
        hotelSelection.setAdapter(adapter);

        daySelection.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                preferDay=  parent.getItemAtPosition(position).toString();


            }

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

            }
        });
public void onPause() {
        super.onPause();
        daySelection = (Spinner)findViewById(R.id.daypreferance);


        SharedPreferences prefs = getSharedPreferences("prefs_name", Context.MODE_PRIVATE);

        prefs.edit().putInt("spinner_indx", daySelection.getSelectedItemPosition()).apply();

    }
 public void onResume() {
        super.onResume();
        daySelection = (Spinner)findViewById(R.id.daypreferance);


        SharedPreferences prefs = getSharedPreferences("prefs_name", Context.MODE_PRIVATE);

        int spinnerIndx = prefs.getInt("spinner_indx", 0);


        daySelection.setSelection(spinnerIndx);

    }

我需要添加代码,以便每当我重新启动我的应用程序时,其所选部分保持不变我想知道我可以做什么,以便微调器不会显示我之前选择的内容

【问题讨论】:

  • 您可以在活动中获取一个静态变量并将其设置为选定的位置,并在 onResume 方法中的同一活动上通过该变量设置微调器选择
  • @Vickyexpert 为什么是静态的?
  • @Moulick 没有完成当前的活动,有微调器只是转到下一个活动,当你完成后,只需完成活动,上一个活动将自动恢复,您的选择不会丢失。跨度>
  • 但是如何做到这一点通常在填充数据后我将转到下一个活动以显示其摘要,如果我认为我需要返回,我将返回此活动(视图),它应该显示我之前选择的任何内容

标签: android spinner


【解决方案1】:

尝试dis,如果有任何错误,请告诉我......

daySelection = (Spinner)findViewById(R.id.daypreferance);
            //String[] dayName = new String[]{
              //      "sunday", "monday", "tuesday" 
            //};

            MyClass[] dayName ={

                    new MyClass("sunday", ""),
                    new MyClass("monday", "2"),
                    new MyClass("tuesday", "3")



            };
            ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(this , R.layout.spinner_items ,R.id.spinneritem,dayName);
            adapter.setDropDownViewResource(R.layout.spinner_items);
            hotelSelection.setAdapter(adapter);

            daySelection.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    //check if preferDay has some valur rhen set on spinner
                     if(preferDay!=null)
    {
                     daySelection.setSelection(Integer.parseInt(preferDay));
    }


                }

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

                }
            });

【讨论】:

  • preferDay 没有任何值,我用它来将其转换为字符串,以便我可以将它放在其他活动的文本视图中作为夏季
  • 跟随@Pierfrancesco 的回答
【解决方案2】:

您可以保存活动状态,然后在返回后设置这些值

检查this stack over flow questionthis one

【讨论】:

    【解决方案3】:

    在 onPause() 方法中保存微调器的状态。

    @Override
    public void onPause() {
       super.onPause();
    
       Spinner spinner = (Spinner)findViewById(R.id.daypreferance);
    
       SharedPreferences prefs = getSharedPreferences("prefs_name", Context.MODE_PRIVATE);
       prefs.edit().putInt("spinner_indx", spinner.getSelectedItemPosition()).apply();
    }
    

    在 onResume() 方法中恢复 spinner 的状态。

    @Override
    public void onResume() {
       super.onResume();
    
       Spinner spinner = (Spinner)findViewById(R.id.daypreferance);
    
       SharedPreferences prefs = getSharedPreferences("prefs_name", Context.MODE_PRIVATE);
       int spinnerIndx = prefs.getInt("spinner_indx", 0);
       spinner.setSelection(spinnerIndx);
    }
    

    【讨论】:

    • 只需复制粘贴我的代码并用您的实际微调器替换“微调器”:)
    • 不,我理解,但是这 2 种方法 onPause 和 onResume 我怎么能把它放在那个代码中,因为我还有 3 个 Spinner 内容也
    • 将此方法(onPause 和 onResume)添加到您的活动中。你可以添加你想要多少个微调器,原理相同。
    • 它在集合选择上显示错误为“无法解析 setSelection(int)”
    • 还是同样的问题
    猜你喜欢
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    相关资源
    最近更新 更多