【问题标题】:android - how to use/set up nested spinners?android - 如何使用/设置嵌套微调器?
【发布时间】:2014-09-19 14:46:23
【问题描述】:

在片段中工作时,我试图返回一个通过选择微调器中的项目确定的值,但我无法使其工作。方法内的 Toast 通知甚至不起作用,似乎问题出在方法内。我该如何解决这个问题?

public Spinner districtSpinner, countySpinner;
public int selectedDistrict;

是使用的变量。这是我的父微调器方法 DistrictSpinner()

public void districtSpinner() {

    ArrayAdapter<String> Dadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.districtNames));
    Dadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    districtSpinner.setAdapter(Dadapter);

    districtSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                                                  public void onItemSelected(AdapterView<?> parent, View view,
                                                                             int position, long id) {
                                                      selectedDistrictPosition = districtSpinner.getSelectedItemPosition();
                                                      switch (selectedDistrictPosition) {
                                                          case 0: {
                                                              selectedDistrict = 1;
                                                              break;
                                                          }
                                                          case 1: {
                                                              selectedDistrict=2;
                                                              break;
                                                          }
                                                          case 2: {
                                                              selectedDistrict=3;
                                                              break;
                                                          }
                                                          case 3: {
                                                              selectedDistrict=4;
                                                              break;
                                                          }
                                                          case 4: {
                                                              selectedDistrict=5;
                                                              break;
                                                          }
                                                          case 5: {
                                                              selectedDistrict=6;
                                                              break;
                                                          }
                                                          case 6: {
                                                              selectedDistrict=8;
                                                              break;
                                                          }
                                                          case 7: {
                                                              selectedDistrict=9;
                                                              break;
                                                          }
                                                          case 8: {
                                                              selectedDistrict=10;
                                                              break;
                                                          }
                                                          case 9: {
                                                              selectedDistrict=11;
                                                              break;
                                                          }
                                                          case 10: {
                                                              selectedDistrict=12;
                                                              break;
                                                          }
                                                          default: {
                                                              selectedDistrict=1;
                                                              break;
                                                          }
                                                      }
                                                  }

                                                  public void onNothingSelected(AdapterView<?> parent) {
                                                  }
                                              }
    );

}

这是我试图使依赖于父微调器的子微调器“countySpinner”。该方法应根据 selectedDistrict 进行切换,并使用包含每个地区的县集 (R.array.districtx) 的相应字符串数组设置微调器。目前第二个微调器什么都不做,就我而言,countySpinner() 甚至没有被调用。

public void countySpinner() {

    switch (selectedDistrict) {
        case 0: {
            break;
        }
        case 1: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district1));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 2: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district2));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 3: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district3));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 4: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district4));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 5: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district5));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 6: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district6));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 7: {

            break;
        }
        case 8: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district8));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 9: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district9));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 10: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district10));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 11: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district11));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        case 12: {
            ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.district12));
            Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
            countySpinner.setAdapter(Cadapter);

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

                                                        public void onNothingSelected(AdapterView<?> parent) {
                                                        }
                                                    }
            );
            break;
        }
        default: {
            break;
        }

    }

【问题讨论】:

  • districtSpinner() 是如何使用的?看来您调用它并期望选择的 int 是返回值。
  • @ErikNedwidek 它几乎只是用于指定选择哪个地区。我正在尝试在 switch case 中使用返回的 int。
  • 这就是问题所在。 switch case 只会在项目被选中时运行,而不是在您调用 districtSpinner() 方法时运行。

标签: android android-layout android-activity android-fragments android-spinner


【解决方案1】:

您可以像I want to setup my second spinner according to the choice made in first spinner 那样更好地说明问题。那么你最好这样做,因为你有办法在里面写很多相同的代码。

public void districtSpinner() {

ArrayAdapter<String> Dadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.districtNames));
Dadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
districtSpinner.setAdapter(Dadapter);

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

        int selectedDistrict = position+1;
        // do yourself a favor and intoduce an empty choice for 7;


        countySpinner(selectedDistrict);                                       
    }

    public void onNothingSelected(AdapterView<?> parent) {
  }
 }
);
}

private int getDistrictResourceId ( int districtnr ) {
   int resId = R.array.district1;
   switch ( districtnr )
   {
   case 1:
   resId = R.array.district1;
   break;
   case 2:
   resId = R.array.district2;
   break;

   // please add the rest
   }

return resId;
}

public void countySpinner( int districtnr) {

int resId = getDistrictResourceId( districtnr );

ArrayAdapter<String> Cadapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, getResources().getStringArray(resId));
        Cadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
        countySpinner.setAdapter(Cadapter);

        countySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
           }
            public void onNothingSelected(AdapterView<?> parent) {
          }
}
        );           
    }
 }

【讨论】:

  • 效果很好,谢谢!我什至没有想过如何更改 resId,这比我使用的方法简单得多。
【解决方案2】:

就我所见,你应该看到一个 Toast。但是让它返回一个值是没有意义的。您只是在该功能中设置适配器。确实有一个 onclicklistener 并在单击时设置了 selectedDistrict。但这仅在用户单击项目时发生。到那时你的函数早就返回了。您的函数现在返回您调用它之前的静态 selectedDistrict 值。

【讨论】:

  • 如何让它在选择时存储该值,然后保留该值?
  • 这在一定程度上取决于您希望使用此值多久。但如果它应该在应用重启后仍然存在,您可以使用共享首选项。
  • 我只需要它能够存活足够长的时间,以便用户将值与数据记录会话结束时记录的其余测量值/数据一起导出。
  • 不知道您的应用设置,您仍然可以使用共享首选项。
  • 我用我的第二个/子微调器的代码更新了 OP。希望看到我正在尝试做的事情会更清楚一些。我确信我这样做的效率非常低/错误,因为我以前从未处理过嵌套微调器。
猜你喜欢
  • 2021-10-04
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多