根据任何微调器项选择,在动态微调器中的特定位置设置新数据

时间:2016-04-27 07:08:55

标签: android android-spinner

我正在制作一个应用程序,我有产品详细信息屏幕,在该屏幕中,我根据可配置项目的长度创建动态旋转器。每件事情都运行正常,但是当我尝试更改其他动态微调器的列表时在选择第一个动态微调器项目时,过滤后的数组会转移到点击的微调器列表,但它应该被添加到另一个微调器,而不是我点击的那个。请帮助我,我真的陷入这种情况,我尝试了很多但不是能够实施,所以我正在寻求你的帮助。

场景假设对于特定产品我有2个微调器,一个用于Color属性,另一个用于Size属性并且两者互相链接例如: - < / p>

在Color spinner下我有三种颜色: - 白色,蓝色,绿色 同样在尺寸下我有: - S,M,L,XL

但对于白色,我只有两种尺寸,即S和M 所以我需要的是当用户点击Spinner并且颜色属性为White时,Second spinner中的数组会自动变为S,M和viseversa

我在动态微调器中做所有这些。

这是我的代码: -

{{1}}

请提供您的建议,我们将非常感谢您的帮助 我在这个问题上被浪费了2天,在动态微调器的情况下是否可行。 谢谢

1 个答案:

答案 0 :(得分:0)

按照我的理解创建动态微调器并不是一个好主意。您可以根据在不同微调器上选择的项目填充数据,如果要在用户从第一个微调器中选择任何数据时显示其他微调器,则可以管理其他微调器的可见性。如果你想使用微调器作为动态,那么这里是代码: -

MainActivity.java

public class MainActivity extends AppCompatActivity {

private LinearLayout mContainerLL;
private Spinner mProductSPN;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mContainerLL = (LinearLayout) findViewById(R.id.ll_spn_container);
    mProductSPN = (Spinner) findViewById(R.id.spn_product);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.product));
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mProductSPN.setAdapter(adapter);
    mProductSPN.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            prepareColorSpinner(position);
        }

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

        }
    });
}

private void prepareSizeSpinner(int productPosition, int colorPosition) {
    if(mContainerLL.getChildCount()>=3) {
        mContainerLL.removeViewAt(2);
    }
    Spinner sizeSPN = new Spinner(this);
    String[] sizeArray = null;
    switch (productPosition) {
        case 0:
            switch (colorPosition) {
                case 0:
                    sizeArray = getResources().getStringArray(R.array.size_1);
                    break;
                case 1:
                    sizeArray = getResources().getStringArray(R.array.size_2);
                    break;
                case 2:
                    sizeArray = getResources().getStringArray(R.array.size_3);
                    break;
            }
            break;
        case 1:
            switch (colorPosition) {
                case 0:
                    sizeArray = getResources().getStringArray(R.array.size_3);
                    break;
                case 1:
                    sizeArray = getResources().getStringArray(R.array.size_2);
                    break;
                case 2:
                    sizeArray = getResources().getStringArray(R.array.size_1);
                    break;
            }
            break;
        case 2:
            switch (colorPosition) {
                case 0:
                    sizeArray = getResources().getStringArray(R.array.size_2);
                    break;
                case 1:
                    sizeArray = getResources().getStringArray(R.array.size_1);
                    break;
                case 2:
                    sizeArray = getResources().getStringArray(R.array.size_3);
                    break;
            }
            break;
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, sizeArray);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sizeSPN.setAdapter(adapter);
    mContainerLL.addView(sizeSPN,2);
}

private void prepareColorSpinner(final int productPosition) {
    if(mContainerLL.getChildCount()>=2) {
        mContainerLL.removeViewAt(1);
    }
    Spinner colorSPN = new Spinner(this);
    String[] colorArray = null;
    switch (productPosition) {
        case 0:
            colorArray = getResources().getStringArray(R.array.color_1);
            break;
        case 1:
            colorArray = getResources().getStringArray(R.array.color_2);
            break;
        case 2:
            colorArray = getResources().getStringArray(R.array.color_3);
            break;
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, colorArray);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    colorSPN.setAdapter(adapter);
    mContainerLL.addView(colorSPN,1);
    colorSPN.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            prepareSizeSpinner(productPosition,position);
        }

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

        }
    });
  }
}

的strings.xml

    <string-array name="product">
    <item>Product 1</item>
    <item>Product 2</item>
    <item>Product 3</item>
</string-array>

<string-array name="color_1">
    <item>Red</item>
    <item>Black</item>
    <item>White</item>
</string-array>
<string-array name="color_2">
    <item>Green</item>
    <item>Blue</item>
</string-array>
<string-array name="color_3">
    <item>Voilet</item>
    <item>Purple</item>
</string-array>

<string-array name="size_1">
    <item>Small</item>
    <item>Large</item>
</string-array>
<string-array name="size_2">
    <item>Medium</item>
    <item>XLarge</item>
</string-array>
<string-array name="size_3">
    <item>Small</item>
    <item>Medium</item>
    <item>Large</item>
</string-array>

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.praween.customviews.MainActivity">

<LinearLayout
    android:id="@+id/ll_spn_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<Spinner
    android:id="@+id/spn_product"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>

根据您的需要更改逻辑,因为我代表您共享的一个场景编写了逻辑。