2016-04-27 220 views
0

我正在做一个应用程序,其中我有产品详细信息屏幕,在该屏幕中我创建基于可配置项目的长度的动态微调。每件事情工作好,但是当我尝试根据第一个动态微调项目的选择更改其他动态微调项目的列表时,过滤的数组会被转移到点击微调列表,但它应该被添加到另一个微调项目,而不是我点击。请帮助我这我真的被困在这种情况下,我尝试了很多,但无法执行,所以我正在寻求你的帮助。基于任何微调项目选择在特定位置设置新数据在特定位置

情景是假设特定产品我有2个旋转器之一是用于色彩属性和其他为尺寸属性而且两者被相互对于实施例相通: -

在颜色微调我有三个颜色: - 白色,蓝色,绿色 同样在尺寸我有: - S,M,L,XL

但对于白色我有只有两种尺寸,即S和M 所以,我需要的是当用户点击Spinne时r具有颜色属性白色,第二个微调器中的数组自动变为S,M和viseversa

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

这里是我的代码: -

private void showconfigurableProducts() { 
      try { 
        count = 0; 
        mllSpinner.setVisibility(View.VISIBLE); 
        for (int i = 0; i < lisProductDetail.get(0).getConfigurable() 
            .size(); i++) { 
          TextView tv = new TextView(getActivity()); 
          tv.setText(lisProductDetail.get(0).getConfigurable().get(i) 
              .getLabel()); 
          mllSpinner.addView(tv); 
          final Spinner spinner = new Spinner(getActivity()); 
          spinner.setTag(i); 
          final ArrayAdapter<OptionProductDetailModel> arrayAdapter=new ArrayAdapter<OptionProductDetailModel>(
              getActivity(), 
              android.R.layout.simple_spinner_dropdown_item, 
              lisProductDetail.get(0).getConfigurable().get(i) 
                  .getOptions()); 
          spinner.setAdapter(arrayAdapter); 
          spinner.setSelection(0, false); 
          spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

            private String attributeId; 

            @Override 
            public void onItemSelected(AdapterView<?> parent, 
                View view, int position, long id) { 
              OptionProductDetailModel option = (OptionProductDetailModel) spinner 
                  .getSelectedItem(); 
              List<OptionProductDetailModel> sizedataArray = new ArrayList<OptionProductDetailModel>(); 
              sizedataArray.add(option); 
              if (listDummy.size() > 0) { 
                selectbtatrue = check(sizedataArray, listDummy); 
              } 

              if (selectbtatrue) { 
                return; 
              } else { 

                for (int i = 0; i < lisProductDetail.get(0) 
                    .getConfigurable().size(); i++) { 
                  for (int j = 0; j < lisProductDetail.get(0) 
                      .getConfigurable().get(i).getOptions() 
                      .size(); j++) { 
                    if (lisProductDetail.get(0) 
                        .getConfigurable().get(i) 
                        .getOptions().get(j).getLabel() == option 
                        .getLabel()) { 
                      attributeId = lisProductDetail.get(0) 
                          .getConfigurable().get(i) 
                          .getId(); 
                    } 
                  } 
                } 
                for (int i = 0; i < lisProductDetail.get(0) 
                    .getConfigurable().size(); i++) { 
                  if (attributeId != lisProductDetail.get(0) 
                      .getConfigurable().get(i).getId()) { 
                    // if (listDummy.size() > 0) { 
                    // listDummy = new 
                    // ArrayList<OptionProductDetailModel>(); 
                    // } 
                    for (int k = 0; k < option.getProducts() 
                        .size(); k++) { 
                      for (int j = 0; j < lisProductDetail 
                          .get(0).getConfigurable() 
                          .get(i).getOptions().size(); j++) { 
                        for (int l = 0; l < lisProductDetail 
                            .get(0).getConfigurable() 
                            .get(i).getOptions().get(j) 
                            .getProducts().size(); l++) { 
                          if (option 
                              .getProducts() 
                              .get(k) 
                              .equals(lisProductDetail 
                                  .get(0) 
                                  .getConfigurable() 
                                  .get(i) 
                                  .getOptions() 
                                  .get(j) 
                                  .getProducts() 
                                  .get(l))) { 

                            listDummy 
                                .add(lisProductDetail 
                                    .get(0) 
                                    .getConfigurable() 
                                    .get(i) 
                                    .getOptions() 
                                    .get(j)); 
                          } else { 

                          } 
                        } 
                      } 
                      System.out.print(listDummy); 
                    } 

                  } 
                  if (count < 2) { 
                    int tag = (int) spinner.getTag(); 
                    if (tag == i) { 

                    } else { 
                      lisProductDetail.get(0) 
                          .getConfigurable().get(i) 
                          .setOptions(listDummy); // Here i am getting S,M,L but i do not know how to update in in Size Attribute Spinner. 

                    } 
                    count = count + 1; 
                  } 
                } 
              } 

            } 

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

            } 

          }); 
          mllSpinner.addView(spinner); 
        } 

      } catch (Exception e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
      } 
    } 


private boolean check(List<OptionProductDetailModel> SelectedArray, 
      List<OptionProductDetailModel> DummyArray) { 
     for (int i = 0; i < SelectedArray.size(); i++) { 
      for (int j = 0; j < DummyArray.size(); j++) { 
       if (SelectedArray.get(i).getId() 
         .equalsIgnoreCase(DummyArray.get(j).getId())) { 
        btatrue = true; 
       } else { 
        btatrue = false; 
       } 
      } 
     } 
     return btatrue; 
    } 

请提供您的建议,您的帮助将不胜感激 我都被浪费在这个问题上我的2天,是否可行或不动的情况下,微调。 谢谢

+0

太复杂的解释方式和太复杂的代码。请简化你想要的东西! :) –

+0

嘿吉米特,我只是想改变基于选择的任何微调项目的微调列表项目,条件是所有微调动态 – sid

+0

然后尝试启动的方法。在第一个'onItemSelected'方法的'onItemSelected'方法内部填充另一个微调控制器,并在其'onItemSelected'方法内部填充下一个微调控制器,等等...... !!! –

回答

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> 

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