2017-07-28 76 views
0

当我为微调器选择静态数据时,其方法OnItemSelectedListener工作正常,但是当我将JSON数据添加到微调器时,它会填充JSON数据及其数据OnItemSelectedListener没有被调用。可能是什么问题呢? 这里是我的代码:当我将JSON数据设置为微调器时,不会调用Spinner中的OnItemSelectedListener方法Android

class list_Activity extends Activity implements OnItemSelectedListener { 

    ProgressDialog progressDialog; 
    RequestQueue requestQueue; 
    String json_id; 
    String json_dept; 
    List<String> spinner_dept; 
    List<String> categories; 
    String selectedCity; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_); 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage("Loading"); 
    progressDialog.show(); 

    // Spinner element 
    Spinner spinner = (Spinner) findViewById(R.id.spinner3); 
    requestQueue= Volley.newRequestQueue(this); 

    // Spinner click listener 
    spinner.setOnItemSelectedListener(this); 

    // Spinner Drop down elements 

    spinner_dept = new ArrayList<String>(); 
    categories = new ArrayList<String>(); 
    categories.add("Automobile"); 
    categories.add("Business Services"); 
    categories.add("Computers"); 
    categories.add("Education"); 
    categories.add("Personal"); 
    categories.add("Travel"); 

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
     Request.Method.GET, 
     "http://192.168.1.104/leave/public/api/department", 
     null, 
     new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      progressDialog.dismiss(); 
      try { 
      JSONArray jsonArray = response.getJSONArray("data"); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 

       String b = jsonArray.getJSONObject(i).getString("department"); 
       spinner_dept.add(b); 

       json_id = jsonObject.getString("identity"); 
       json_dept = jsonObject.getString("department"); 

       department deprt = new department(); 

       deprt.setId(json_id); 
       deprt.setDepartment(json_dept); 

       // spinner_data.add(deprt); 

       // spinner_dept.add(jsonObject.getString("department")); 

       //textView.append(id+" "+ first_name + " " + last_name + "\n"); 
      } 
      } catch (JSONException e) { 
      e.printStackTrace(); 
      } 
     } 
     }, 
     new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("error", "error from server response"); 
     } 
     }); 

    requestQueue.add(jsonObjectRequest); 

    // Creating adapter for spinner 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinner_dept); 

    // Drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    // attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    // On selecting a spinner item 
    String item = parent.getItemAtPosition(position).toString(); 
    // selectedCity = spinner.getSelectedItem().toString(); 
    if (position != 0) { 
     //put your actions here 
     String ch =spinner_dept.get(position); 

     Toast.makeText(parent.getContext(), "Selected: " + selectedCity, Toast.LENGTH_LONG).show(); 
    } else { 
     // nothing here or toast 
     Toast.makeText(parent.getContext(), "Selected: " , Toast.LENGTH_LONG).show(); 
    } 

    // Showing selected spinner item 
    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 
    } 
} 
+0

的错误检查日志可能是一些你可以发现有 – Anil

+0

参考https://stackoverflow.com/questions/2562248/how-to-keep-onitemselected-from-firing-off-on-a-newly - 实验 - 微调 – sasikumar

回答

1

您不添加数据后刷新您的适配器。做以下更改,它会起作用。

// Creating adapter for spinner 
final ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinner_dept); 

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://192.168.1.104/leave/public/api/department" 
     , null, new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 

     progressDialog.dismiss(); 
     try { 
      JSONArray jsonArray = response.getJSONArray("data"); 

      for (int i = 0; i < jsonArray.length(); i++) { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 

       String b = jsonArray.getJSONObject(i).getString("department"); 
       spinner_dept.add(b); 

       json_id = jsonObject.getString("identity"); 
       json_dept = jsonObject.getString("department"); 


       department deprt = new department(); 

       deprt.setId(json_id); 
       deprt.setDepartment(json_dept); 

       // spinner_data.add(deprt); 

       // spinner_dept.add(jsonObject.getString("department")); 

       //textView.append(id+" "+ first_name + " " + last_name + "\n"); 

      } 

     //Add this to refresh the spinner adapter 
     dataAdapter.notifyDataSetChanged(); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 

     Log.d("error", "error from server response"); 
    } 
} 

); 


requestQueue.add(jsonObjectRequest); 
+0

thanx它为我工作! – Axay

0

IMO你微调不正确引用到SelectedListener所以你可以定义微调onCreate方法外尝试下面的代码

ProgressDialog progressDialog; 
RequestQueue requestQueue; 
String json_id; 
String json_dept; 
List<String> spinner_dept; 
List<String> categories; 
String selectedCity; 
Spinner spinner; //here 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_); 
progressDialog= new ProgressDialog(this); 
    progressDialog.setMessage("Loading"); 
    progressDialog.show(); 

    // Spinner element 
    spinner = (Spinner) findViewById(R.id.spinner3); 
    requestQueue= Volley.newRequestQueue(this); 

    // Spinner click listener 
    spinner.setOnItemSelectedListener(this); 

    // Spinner Drop down elements 

    spinner_dept = new ArrayList<String>(); 
    categories = new ArrayList<String>(); 
    categories.add("Automobile"); 
    categories.add("Business Services"); 
    categories.add("Computers"); 
    categories.add("Education"); 
    categories.add("Personal"); 
    categories.add("Travel"); 



    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, "http://192.168.1.104/leave/public/api/department" 
      , null, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 

      progressDialog.dismiss(); 
      try { 
       JSONArray jsonArray = response.getJSONArray("data"); 

       for (int i = 0; i < jsonArray.length(); i++) { 
        JSONObject jsonObject = jsonArray.getJSONObject(i); 

        String b = jsonArray.getJSONObject(i).getString("department"); 
        spinner_dept.add(b); 

        json_id = jsonObject.getString("identity"); 
        json_dept = jsonObject.getString("department"); 


        department deprt = new department(); 

        deprt.setId(json_id); 
        deprt.setDepartment(json_dept); 

        // spinner_data.add(deprt); 

        // spinner_dept.add(jsonObject.getString("department")); 

        //textView.append(id+" "+ first_name + " " + last_name + "\n"); 

       } 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 

      Log.d("error", "error from server response"); 
     } 
    } 

    ); 


    requestQueue.add(jsonObjectRequest); 

    // Creating adapter for spinner 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinner_dept); 

    // Drop down layout style - list view with radio button 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 

} 

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    // On selecting a spinner item 
    String item = parent.getItemAtPosition(position).toString(); 
    // selectedCity = spinner.getSelectedItem().toString(); 
    if (position != 0) { 
     //put your actions here 
     String ch =spinner_dept.get(position); 


     Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show(); 
    } 

    else { 
     // nothing here or toast 
     Toast.makeText(parent.getContext(), "Selected: " , Toast.LENGTH_LONG).show(); 
    } 


    // Showing selected spinner item 

} 
public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 
} 
+0

同样的问题:( – Axay

+0

@Axay检查你的吐司尝试更新的代码集'项目'而不是selectedCity – Omi

+0

我已经尝试过这一点,敬酒工作正常与静态数据是“类别”,但它不适用于JSON数据。 – Axay

1

写在你的主要活动是这样

public class HomeFragment extends Fragment { 

    Spinner spinmeter; 
    ArrayList<Data> categoriesList = new ArrayList<>(); 
@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     rootView= inflater.inflate(R.layout.fragment_home, container, false); 

     spinmeter=(Spinner)rootView.findViewById(R.id.spinmeter); 
     new GetCategories().execute(); 
return rootView; 
} 
private class GetCategories extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     protected Void doInBackground(Void... arg0) { 
      ServiceHandler jsonParser = new ServiceHandler(); 
      String json = jsonParser.makeServiceCall(
        "http://meter.digireach.com/demo/app_webservice/spinner.php?did=" 
          + did + "", ServiceHandler.GET); 

      Log.e("Response: ", "> " + did); 

      if (json != "") { 
       try { 
        JSONObject jsonObj = new JSONObject(json); 
        if (jsonObj != null) { 
         JSONArray data = jsonObj.getJSONArray("data"); 
         for (int i = 0; i < data.length(); i++) { 
          JSONObject catObj = (JSONObject) data.get(i); 
          Data cat = new Data(catObj.getInt("id"), 
            catObj.getString("meter_name")); 
          categoriesList.add(cat); 
         } 
        } 
       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 

      } else 
       { 
       Log.e("JSON Data", "Didn't receive any data from server!"); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      // if (pDialog.isShowing()) 
      //  pDialog.dismiss(); 
      populateSpinner(); 
     } 

     private void populateSpinner() { 
      // TODO Auto-generated method stub 
      List<String> lables = new ArrayList<>(); 

      for (int i = 0; i < categoriesList.size(); i++) 
      { 
       lables.add(categoriesList.get(i).getUsername()); 
      } 

      // Creating adapter for spinner 
      ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(
        getActivity(),R.layout.spinner_item, lables); 

      // Drop down layout style - list view with radio button 
      spinnerAdapter.setDropDownViewResource(R.layout.spinner_item); 

      // attaching data adapter to spinner 
      spinmeter.setAdapter(spinnerAdapter); 

      spinmeter.setOnItemSelectedListener(new OnItemSelectedListener() { 

       public void onItemSelected(AdapterView<?> parent, View view, 
              int position, long id) { 

       // meter = spinmeter.getSelectedItem().toString(); 
        meter=spinmeter.getSelectedItemPosition()+1; 
        Log.e("Response: ", "> " + meter); 

        if (meter == 1) { 
         new getdata().execute(); 
         drawchart(); 
         new json1().execute(); 
         drawchart1(); 
         new json2().execute(); 
        } 
        if(meter == 2) 
        { 
         new getdata().execute(); 
         drawchart(); 
         new json1().execute(); 
         drawchart1(); 
         new json2().execute(); 
        } 
       } 
       public void onNothingSelected(AdapterView<?> parent) { 
        // TODO Auto-generated method stub 
       } 
      }); 
     } 
    } 

还创建java类Data.java

package com.example.lenovo.meter; 

    public class Data { 
      private int id; 
      private String meter_name; 

      public Data(){} 

      public Data(int id, String meter_name){ 
       this.id = id; 
       this.meter_name = meter_name; 
      } 

      public void setId(int id){ 
       this.id = id; 
      } 

      public void setUsername(String meter_name){ 
       this.meter_name = meter_name; 
      } 

      public int getId(){ 
       return this.id; 
      } 

      public String getUsername(){ 
       return this.meter_name; 
      } 

    } 

创建spinner_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#ffffff" 
    android:background="#808080" 
    android:padding="10dp" 
    /> 
+0

使用此代码的onitemselectedlistener在微调 –

相关问题