当前位置: 首页 > 面试题库 >

选择状态后,使用notifyDataSetChanged更新City Spinner

沃威
2023-03-14
问题内容

用户选择州后,如何更新我的城市微调器?

这两个字段均使用填充DataCall.class,该返回JSON数据并将信息解析为微调框的数组。

下面的代码将城市adapter设置为默认的 “选择州”
值,一旦用户选择了该州,则应使用notifyDataSetChanged,因为城市微调框的默认数组已使用新的城市名称进行了更新。我在下面的代码中评论了我遇到的错误。

public class SearchActivity extends Activity{
       private static final String TAG = "MyApp";
       ArrayAdapter<String> adapter2;
       String city_values[] = new String[]{"Please select a state."};

       @Override
       public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.search_layout);

            final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner);
            final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner);

            adapter2 = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item, city_values);
            adapter2.setDropDownViewResource(R.layout.city_spinner_layout);
            cityspinner.setAdapter(adapter2);

            JSONArray jsonArray;
            try {
                String spinnerContentType = "state";
                String spinnerURL = "getStoreState.php";
                String spinner_data =  DataCall.getJSON(spinnerURL,spinnerContentType); 
                Log.d(TAG, spinner_data);
                jsonArray = new JSONArray(spinner_data);

                final String[] array_spinner = new String[jsonArray.length()]; 
                for (int i=0; i<jsonArray.length(); i++) {   
                String styleValue = jsonArray.getJSONArray(i).getString(0);    
                    Log.d(TAG, styleValue);
                    array_spinner[i] = styleValue;
                }

                ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, 
                                  android.R.layout.simple_spinner_item,array_spinner);
                adapter.setDropDownViewResource(R.layout.state_spinner_layout);
                zipspinner.setAdapter(adapter);
                zipspinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                      public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
                            int item = zipspinner.getSelectedItemPosition();
                            if(item != 0){

                                String item_value = array_spinner[item];
                                String spinnerContentType = "city";
                                String spinnerURL = "getStoreCity.php?state=" + item_value;
                                Log.d(TAG, spinnerURL);
                                String city_data =  DataCall.getJSON(spinnerURL,spinnerContentType); 
                                Log.d(TAG, city_data);

                                JSONArray cityArray = null;
                                try {
                                    cityArray = new JSONArray(city_data);
                                } catch (JSONException e) {
                                     e.printStackTrace();
                                }       
                                final String[] city_spinner = new String[cityArray.length()];

                                for (int i=0; i<cityArray.length(); i++){                       
                                    String styleValue = null;
                                    try {
                                        styleValue = cityArray.getJSONArray(i).getString(0);
                                        Log.d(TAG, styleValue);
                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }              
                                    city_spinner[i] = styleValue;                               
                                }

                                city_values = city_spinner; 
                                adapter2.notifyDataSetChanged();

                                String test_string = "NOTIFY UPDATE";
                                Log.d(TAG, test_string);
                            } else {
                               // finish();
                            }
                        }
                        public void onNothingSelected(AdapterView parent) {
                          // Do nothing.
                        }
                   });

                   cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                        public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
                            int item = zipspinner.getSelectedItemPosition();
                            if(item != 0){

                            }else{

                            }

                        }

                        public void onNothingSelected(AdapterView parent) {
                          // Do nothing.
                        }
                  });   
          }catch (JSONException e) {
                e.printStackTrace();
          }
     }
}

问题答案:
public class SearchActivity extends Activity {
    ArrayAdapter<String> adapter2;
    String city_values[];

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search_layout);

        final Spinner zipspinner = (Spinner) findViewById(R.id.zipspinner);
        final Spinner cityspinner = (Spinner) findViewById(R.id.cityspinner);

        String city_values[] = new String[]{"Please select a state."};
        adapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, city_values);
        adapter2.setDropDownViewResource(R.layout.city_spinner_layout);
        cityspinner.setAdapter(adapter2);

        JSONArray jsonArray;
        final JSONArray cityArray;

        try {
            String spinnerContentType = "state";
            String spinnerURL = "getStoreState.php";
            String spinner_data = DataCall.getJSON(spinnerURL, spinnerContentType);

            jsonArray = new JSONArray(spinner_data);

            final String[] array_spinner = new String[jsonArray.length()];

            for (int i = 0; i < jsonArray.length(); i++) {
                String styleValue = jsonArray.getJSONArray(i).getString(0);
                array_spinner[i] = styleValue;
            }

            ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array_spinner);
            adapter.setDropDownViewResource(R.layout.state_spinner_layout);
            zipspinner.setAdapter(adapter);
            zipspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                    int item = zipspinner.getSelectedItemPosition();
                    String item_value = array_spinner[item];
                    String spinnerContentType = "city";
                    String spinnerURL = "getStoreCity.php?state=" + item_value;
                    String city_data = DataCall.getJSON(spinnerURL, spinnerContentType);
                    cityArray = new JSONArray(city_data);               //The final local variable cityArray cannot be assigned, since it is defined in an enclosing type

                    final String[] city_spinner = new String[cityArray.length()];


                    for (int i = 0; i < cityArray.length(); i++) {
                        String styleValue = cityArray.getJSONArray(i).getString(0); //Unhandled exception type JSONException                
                        city_spinner[i] = styleValue;
                    }

                    city_values = city_spinner; //Unhandled exception type JSONException
                    adapter2.notifyDataSetChanged();
                }

                public void onNothingSelected(AdapterView parent {
                    // Do nothing.
                }
            });
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

现在尝试



 类似资料:
  • 我想在从React DatePicker中选择日期时更新组件的状态。我下面有一些奇怪的行为。 当前行为的例子: > 带有空日期字段的组件加载 我选择2017年3月28日并获得以下控制台日志 主要的ffde8a1f。js:8它改变了日期 main.ffde8a1f.js: 8日期=1490673600000 主要的ffde8a1f。js:8 dueDate值= 假设我选择2017年3月22日并获得以

  • 在这种情况下,我更改选择元素并调用数据更新方法。该方法从状态获取值。但是当数据更新时,状态还没有改变。当您再次调用数据更新时,状态已经更新了如何正确进行更新? 反应成分

  • 使用最新iOS设备中的M7芯片,当用户使用CMMotionActivityManager从静止状态转到跑步、行走等状态时,可以通过编程方式获得通知。Stava和Runkeeper都使用此功能在检测到用户未通过M7移动时自动暂停GPS轮询(关闭GPS天线),然后在再次移动时重新启用GPS更新。它可以在应用程序处于后台状态时执行此操作,这是此处的关键。 复制此功能时遇到的问题是,如果我在应用程序处于后

  • 说明 支付宝境外到店支付-更新商户二维码状态 官方文档:https://global.alipay.com/service/merchant_QR_Code/34 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyStatus\Request 属性 名称 类型 说明 $service string 接口名称 $timesta

  • 我正在尝试使用注册功能组件中的useState更新组件的状态。当用户输入无效的电子邮件地址并单击“提交”按钮时,以下代码将返回错误消息 我想用这段代码将错误消息设置为formData。 如何将错误消息设置为formData? 这是我的密码:

  • 所以我尝试使用react、redux应用一个简单的登录功能。通过使用axios post请求发送到django服务器(用户名、密码),但问题出在调用它的组件上。例如组件A。所以场景是这样的: 用户输入用户名和密码,然后单击提交 > 导出默认连接(mapStateToProps, mapDispatchToProps)(LoginView); } > 我的初始状态 const initialStat