2016-02-09 1 views
0

J'essaye de développer une liste déroulante de listview, cependant, quand j'exécute l'application je ne peux pas voir la liste déroulante de listview qui devrait montrer les diverses options des chaînes.xml J'ai quelques erreurs tout en essayer d'implémenter le OnitemSelecteListener.spinner n'affiche pas les éléments listview

PlaceActivity.Java

public class PlaceActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 


    public ArrayList<GetterSetter> myArrayList; 
    private Toolbar toolbar; 
    private Spinner spinner; 
    ListView myList; 
    private String[] places; 
    ProgressDialog dialog; 
    TextView nodata; 
    PlaceAdapter adapter; 
    GetterSetter addValues; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_place); 

     if (!isNetworkAvailable()) { 
      Toast.makeText(getApplicationContext(), "Enable internet connection and RE-LAUNCH!!", 
        Toast.LENGTH_LONG).show(); 
      return; 
     } 

     myList = (ListView) findViewById(R.id.myList); 
     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     places = getResources().getStringArray(R.array.places); 

     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     setTitle("Title"); 

     spinner = (Spinner) findViewById(R.id.spinnerplaces); 


     // Create an ArrayAdapter using the string array and a default spinner 
     ArrayAdapter<CharSequence> listAdapter = ArrayAdapter 
       .createFromResource(this, R.array.places, 
         android.R.layout.simple_spinner_item); 

     // Specify the layout to use when the list of choices appears 
     listAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // Apply the adapter to the spinner 
     spinner.setAdapter(listAdapter); 



    } 

    private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null; 
    } 

    public void onItemSelected(AdapterView<?> parent, View view, int itemPosition, long itemId) { 
     dialog = ProgressDialog.show(this, "", "Please wait", true); 
     // Google Places Access key and location values. 
     new readFromGooglePlaceAPI() 
       .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?" 
         + "location=53.795984,-1.759398&radius=900&sensor=true&" 
         + "key=API_Key&types=" 
         + places[itemPosition]); 
     myList.OnItemSelectedListener (this); 
     return true; 
    } 


    public class readFromGooglePlaceAPI extends AsyncTask<String, Void, String> { 
     @Override protected String doInBackground(String... param) { 
      return readJSON(param[0]); 
     } 

     protected void onPostExecute(String str) { 
      myArrayList = new ArrayList<GetterSetter>(); 
      try { 
       JSONObject root = new JSONObject(str); 
       JSONArray results = root.getJSONArray("results"); 
       for (int i = 0; i < results.length(); i++) { 
        JSONObject arrayItems = results.getJSONObject(i); 
        JSONObject geometry = arrayItems.getJSONObject("geometry"); 
        JSONObject location = geometry.getJSONObject("location"); 
        addValues = new GetterSetter(); 
        addValues.setLat(location.getString("lat")); 
        addValues.setLon(location.getString("lng")); 
        addValues.setName(arrayItems.getString("name").toString()); 
        addValues.setRating(arrayItems.getString("rating").toString()); 
        addValues.setVicinity(arrayItems.getString("vicinity").toString()); 
        myArrayList.add(addValues); 

        Log.d("Before", myArrayList.toString()); 

       } 

      } catch (Exception e) { 

      } 
      System.out 
        .println("############################################################################"); 
      Log.d("After:", myArrayList.toString()); 
      nodata = (TextView) findViewById(R.id.nodata); 
      nodata.setVisibility(View.GONE); 
      adapter = new PlaceAdapter(PlaceActivity.this, R.layout.list_row, myArrayList); 
      myList.setAdapter(adapter); 
      adapter.notifyDataSetChanged(); 
      dialog.dismiss(); 
     } 

    } 

    public String readJSON(String URL) { 
     StringBuilder sb = new StringBuilder(); 
     HttpGet httpGet = new HttpGet(URL); 
     HttpClient client = new DefaultHttpClient(); 

     try { 
      HttpResponse response = client.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      if (statusLine.getStatusCode() == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream content = entity.getContent(); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
       String line; 

       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 
      } else { 
       Log.e("JSON", "Couldn't find JSON file"); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return sb.toString(); 
    } 

    @Override public void onNothingSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent details = new Intent(PlaceActivity.this, Details.class); 
     details.putExtra("name", myArrayList.get(arg2).getName()); 
     details.putExtra("rating", myArrayList.get(arg2).getRating()); 
     details.putExtra("vicinity", myArrayList.get(arg2).getVicinity()); 
     details.putExtra("lat", myArrayList.get(arg2).getLat()); 
     details.putExtra("lon", myArrayList.get(arg2).getLon()); 
     startActivity(details); 
    } 

Erreur 1 - classe doit soit être déclarée abstraite ou mettre en œuvre la méthode abstraite sur AdapterView.OnItemSelectedListener.

public class PlaceActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

Erreur 2 - Méthode ne remplace pas de sa super-classe.

@Override public void onNothingSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent details = new Intent(PlaceActivity.this, Details.class); 
     details.putExtra("name", myArrayList.get(arg2).getName()); 
     details.putExtra("rating", myArrayList.get(arg2).getRating()); 
     details.putExtra("vicinity", myArrayList.get(arg2).getVicinity()); 
     details.putExtra("lat", myArrayList.get(arg2).getLat()); 
     details.putExtra("lon", myArrayList.get(arg2).getLon()); 
     startActivity(details); 
    } 

Répondre

0

Je pense que vous avez oublié d'ajouter spinner.setAdapter (list); à la fin de onCreate()

Vous pouvez l'utiliser pour mettre en œuvre OnItemSelectedListener:

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

     } 

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

     } 
    }); 

Quelque chose comme ceci:

public class PlaceActivity extends AppCompatActivity { 


public ArrayList<GetterSetter> myArrayList; 
private Toolbar toolbar; 
private Spinner spinner; 
ListView myList; 
private String[] places; 
ProgressDialog dialog; 
TextView nodata; 
PlaceAdapter adapter; 
GetterSetter addValues; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_place); 

    if (!isNetworkAvailable()) { 
     Toast.makeText(getApplicationContext(), "Enable internet connection and RE-LAUNCH!!", 
       Toast.LENGTH_LONG).show(); 
     return; 
    } 

    myList = (ListView) findViewById(R.id.myList); 
    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    places = getResources().getStringArray(R.array.places); 

    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    setTitle("Title"); 

    spinner = (Spinner) findViewById(R.id.spinnerplaces); 


    // Create an ArrayAdapter using the string array and a default spinner 
    ArrayAdapter<CharSequence> listAdapter = ArrayAdapter 
      .createFromResource(this, R.array.places, 
        android.R.layout.simple_spinner_item); 

    // Specify the layout to use when the list of choices appears 
    listAdapter 
      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    spinner.setAdapter(listAdapter); 

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

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      Intent details = new Intent(PlaceActivity.this, Details.class); 
      details.putExtra("name", myArrayList.get(arg2).getName()); 
      details.putExtra("rating", myArrayList.get(arg2).getRating()); 
      details.putExtra("vicinity", myArrayList.get(arg2).getVicinity()); 
      details.putExtra("lat", myArrayList.get(arg2).getLat()); 
      details.putExtra("lon", myArrayList.get(arg2).getLon()); 
      startActivity(details); 
     } 
    }); 



} 

private boolean isNetworkAvailable() { 
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
    return activeNetworkInfo != null; 
} 

public void onItemSelected(AdapterView<?> parent, View view, int itemPosition, long itemId) { 
    dialog = ProgressDialog.show(this, "", "Please wait", true); 
    // Google Places Access key and location values. 
    new readFromGooglePlaceAPI() 
      .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?" 
        + "location=53.795984,-1.759398&radius=900&sensor=true&" 
        + "key=API_Key&types=" 
        + places[itemPosition]); 
    myList.OnItemSelectedListener (this); 
    return true; 
} 


public class readFromGooglePlaceAPI extends AsyncTask<String, Void, String> { 
    @Override protected String doInBackground(String... param) { 
     return readJSON(param[0]); 
    } 

    protected void onPostExecute(String str) { 
     myArrayList = new ArrayList<GetterSetter>(); 
     try { 
      JSONObject root = new JSONObject(str); 
      JSONArray results = root.getJSONArray("results"); 
      for (int i = 0; i < results.length(); i++) { 
       JSONObject arrayItems = results.getJSONObject(i); 
       JSONObject geometry = arrayItems.getJSONObject("geometry"); 
       JSONObject location = geometry.getJSONObject("location"); 
       addValues = new GetterSetter(); 
       addValues.setLat(location.getString("lat")); 
       addValues.setLon(location.getString("lng")); 
       addValues.setName(arrayItems.getString("name").toString()); 
       addValues.setRating(arrayItems.getString("rating").toString()); 
       addValues.setVicinity(arrayItems.getString("vicinity").toString()); 
       myArrayList.add(addValues); 

       Log.d("Before", myArrayList.toString()); 

      } 

     } catch (Exception e) { 

     } 
     System.out 
       .println("############################################################################"); 
     Log.d("After:", myArrayList.toString()); 
     nodata = (TextView) findViewById(R.id.nodata); 
     nodata.setVisibility(View.GONE); 
     adapter = new PlaceAdapter(PlaceActivity.this, R.layout.list_row, myArrayList); 
     myList.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
     dialog.dismiss(); 
    } 

} 

public String readJSON(String URL) { 
    StringBuilder sb = new StringBuilder(); 
    HttpGet httpGet = new HttpGet(URL); 
    HttpClient client = new DefaultHttpClient(); 

    try { 
     HttpResponse response = client.execute(httpGet); 
     StatusLine statusLine = response.getStatusLine(); 
     if (statusLine.getStatusCode() == 200) { 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 

      while ((line = reader.readLine()) != null) { 
       sb.append(line); 
      } 
     } else { 
      Log.e("JSON", "Couldn't find JSON file"); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return sb.toString(); 
} 
} 
+0

J'ai ajouté que maintenant, mais toujours même problème. –

+0

Comment puis-je mettre mon code dans ceci. s'il vous plaît conseil? –

+0

Si vous souhaitez implémenter AdapterView.OnItemSelectedListener dans votre classe, vous devez remplacer les deux méthodes: onItemSelected (AdapterView parent, Vue vue, position int, id long) et public void onNothingSelected (AdapterView parent). –

0

Essayez ceci:

Remplacer les lignes suivantes de onCreate événement dans PlaceActivity

spinner = (Spinner) findViewById(R.id.spinnerplaces);  

     // Create an ArrayAdapter using the string array and a default spinner 
     ArrayAdapter<CharSequence> listAdapter = ArrayAdapter 
       .createFromResource(this, R.array.places, 
         android.R.layout.simple_spinner_item); 

     // Specify the layout to use when the list of choices appears 
     listAdapter 
       .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     // Apply the adapter to the spinner 
     spinner.setAdapter(listAdapter); 

par cette

spinner = (Spinner) findViewById(R.id.spinnerplaces); 

     // Create an ArrayAdapter using the string array and a default spinner 
     ArrayAdapter<String> listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, getResources().getStringArray(R.array.places)); 

     // Apply the adapter to the spinner 
     spinner.setAdapter(listAdapter); 

     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       dialog = ProgressDialog.show(this, "", "Please wait", true); 
       // Google Places Access key and location values. 
       new readFromGooglePlaceAPI() 
         .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?" 
           + "location=53.795984,-1.759398&radius=900&sensor=true&" 
           + "key=API_Key&types=" 
           + places[itemPosition]); 
       myList.OnItemSelectedListener (this); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       Intent details = new Intent(PlaceActivity.this, Details.class); 
       details.putExtra("name", myArrayList.get(arg2).getName()); 
       details.putExtra("rating", myArrayList.get(arg2).getRating()); 
       details.putExtra("vicinity", myArrayList.get(arg2).getVicinity()); 
       details.putExtra("lat", myArrayList.get(arg2).getLat()); 
       details.putExtra("lon", myArrayList.get(arg2).getLon()); 
       startActivity(details); 
      } 

     }); 

Et enlever "implémente AdapterView.OnItemSelectedListener" de PlaceActivity.

supprimer également 2 suivant la méthode, vous en dehors de l'événement géré onCreate

@Override public void onNothingSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent details = new Intent(PlaceActivity.this, Details.class); 
     details.putExtra("name", myArrayList.get(arg2).getName()); 
     details.putExtra("rating", myArrayList.get(arg2).getRating()); 
     details.putExtra("vicinity", myArrayList.get(arg2).getVicinity()); 
     details.putExtra("lat", myArrayList.get(arg2).getLat()); 
     details.putExtra("lon", myArrayList.get(arg2).getLon()); 
     startActivity(details); 
    } 

et

public void onItemSelected(AdapterView<?> parent, View view, int itemPosition, long itemId) { 
    dialog = ProgressDialog.show(this, "", "Please wait", true); 
    // Google Places Access key and location values. 
    new readFromGooglePlaceAPI() 
      .execute("https://maps.googleapis.com/maps/api/place/nearbysearch/json?" 
        + "location=53.795984,-1.759398&radius=900&sensor=true&" 
        + "key=API_Key&types=" 
        + places[itemPosition]); 
    myList.OnItemSelectedListener (this); 
    return true; 
}