当其他微调器更改时保持微调器选择

Posted

技术标签:

【中文标题】当其他微调器更改时保持微调器选择【英文标题】:Keep spinner selection when other spinner changes 【发布时间】:2016-09-20 00:36:24 【问题描述】:

我正在为我的一个朋友(正在学习 Java/android 应用程序)创建一个应用程序,他的客户将能够使用一系列微调器来选择特定产品的价格。

我现在对微调器有点困惑,我终于知道它们是如何连接在一起的,并且我设法创建了一些代码,这些代码将根据前一个微调器的选择设置微调器的选项。

这一直有效,直到在不同的微调器上进行选择。例如。 在微调器 1 上选择“单速”, 在微调器 2 上选择了“4”, 在微调器 3 上选择了“钩子”, 微调器 2 重置。

一旦选择了另一个微调器,我如何阻止我的动态微调器重置?

最终,我会将所有微调器构建成动态的,因为不同的选择将决定哪些选项应该可用。

提前致谢。 (感谢它写得并不出色,希望随着时间的推移会有所改进)。

    public class priceList extends Activity implements AdapterView.OnItemSelectedListener

    Spinner capacity;
    Spinner speed;
    Spinner hoistSpeed;
    Spinner type;



    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_price_list);


        //Spinner for Capacity
        capacity = (Spinner) findViewById(R.id.capacityTextView);
        ArrayAdapter adapterCapa=ArrayAdapter.createFromResource(this,R.array.arrayCapacity, android.R.layout.simple_spinner_item);
        capacity.setAdapter(adapterCapa);
        capacity.setOnItemSelectedListener(this);

        //Spinner for the Speed
        speed = (Spinner) findViewById(R.id.speedTextView);
        ArrayAdapter adapterSpd = ArrayAdapter.createFromResource(this,R.array.arraySpeed, android.R.layout.simple_spinner_item);
        speed.setAdapter(adapterSpd);
        speed.setOnItemSelectedListener(this);


        //Spinner for the type
        type = (Spinner) findViewById(R.id.typeTextView);
        ArrayAdapter adapterBeam=ArrayAdapter.createFromResource(this,R.array.arrayType, android.R.layout.simple_spinner_item);
        type.setAdapter(adapterBeam);
        type.setOnItemSelectedListener(this);

    

    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) 

        //TextView myText = (TextView) view;
        //Toast.makeText(this, myText.getText(), Toast.LENGTH_SHORT).show();


        hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView);
        ArrayAdapter adapterTypeA=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedSingle, android.R.layout.simple_spinner_item);
        hoistSpeed = (Spinner) findViewById(R.id.hoistSpeedTextView);
        ArrayAdapter adapterTypeB=ArrayAdapter.createFromResource(this,R.array.arrayHoistSpeedDouble, android.R.layout.simple_spinner_item);

        if(speed.getSelectedItem().toString().equals("Single Speed"))
        

            hoistSpeed.setAdapter(adapterTypeA);

        

        else if(speed.getSelectedItem().toString().equals("Dual Speed"))
        

            hoistSpeed.setAdapter(adapterTypeB);

        

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

    


【问题讨论】:

github.com/henrychuangtw/ReuseSpinner 【参考方案1】:

你的问题比较混乱,或许你可以换个说法

但是您可以根据在当前微调器中选择的内容来控制或设置下一个微调器,并适当地进行检查。

您可以直接编写您的 setOnItemSelectedListener,以将逻辑彼此分离。

String[] speedArr = getResources().getStringArray(R.array.arraySpeed);

    speed.setAdapter(adapter);
            speed.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() 

                @Override
                public void onItemSelected(AdapterView<?> parent, View v, int position, long id) 
                     //Do your checks here, and set the next spinner, or reset the previous one.

                 //This automatically gets your selected value, so no need doing an if else check here again
                 String selectedValue = speedArr[position];
                

                @Override
                public void onNothingSelected(AdapterView<?> arg0) 
                    // TODO Auto-generated method stub

                
            );

【讨论】:

感谢您的回复。对困惑感到抱歉。 The next spinner selections will be determined from the selection of the previous spinner which works fine, when a 3rd spinner is selected, the 2nd spinner is reset for some reason.那有意义吗。我将编辑我的问题,一些逗号会很有帮助。 是的,如果你把每个spinner的setOnItemSelectedListener分开,它会解决第二个spinner被重置的问题,因为你的代码逻辑会分开放置。重复使用此代码 我明白你在说什么,但根本无法让它发挥作用。您提供的示例代码是否进入 onCreate 方法。我的所有个人 seOnItemSelectedListener 是否都进入 onCreate 方法?很抱歉成为菜鸟。 是的,它进入了 create 方法,请将您的代码粘贴到 git hub gist 上,这样我就可以看到它的全部内容了,gist.github.com priceList.java@html 感谢您查看此内容。

以上是关于当其他微调器更改时保持微调器选择的主要内容,如果未能解决你的问题,请参考以下文章

Android 日期选择器片段更改为微调器

有没有办法让微调器选项打开另一个微调器?

当微调器数据来自服务器时,向微调器添加第一个值

如何根据两个不同活动中其他微调器的位置更改微调器的位置

选择时如何修剪微调器选择?

创建应用程序按钮未生成应用程序,卡在微调器上