2016-02-14 2 views
0

Мне просто интересно, может ли кто-нибудь помочь мне решить проблему, с которой я сталкиваюсь сейчас, когда пытаюсь реализовать setOnItemSelectedListener и onNothingSelected события с помощью spinner.с помощью setOnItemSelectedListener и onNothingSelected with spinner

После того, как пользователь выберет опцию из счетчика, он покажет им имена мест в google, а затем, когда пользователь нажмет на место, отобразит другую страницу, которая называется details.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); 
     ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(PlaceActivity.this, R.array.places,android.R.layout.simple_spinner_item); 
     list.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner.setOnItemSelectedListener(this); 
    } 


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

    @Override 
    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=AIzaSyA7CzOa10AOfBAU9FvaIrVlVyCKzXxiCc0&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<?> parent) { 
     // no-op 
    } 

где я размещаю приведенный ниже код.

@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent details = new Intent(MainActivity.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); 
    } 

ответ

0

Вы находитесь в правильном направлении. Сейчас у вас есть необходимые методы, но вы должны сделать свой класс реализации OnItemSelectedListener и установить его в качестве слушателя для вашего блесны как таковой:

общественный класс PlaceActivity простирается AppCompatActivity реализует OnItemSelectedListener { ... }

А затем, чтобы установить класс в качестве слушателя, вы можете добавить эту строку после: spinner = (Spinner) findViewById (R.id.spinnerplaces);

spinner.setOnItemSelectedListener (this);

+0

Я внесла изменения в код. Могли бы вы, пожалуйста, посоветовать. –

+0

Не могли бы вы рассказать о том, что произошло, когда вы внесли изменения? – Dave

+0

Я мог видеть снайперу, однако ничего не произошло, как только щелкнули по списку параметров. пожалуйста помоги. –

0

я предлагаю что-то вроде этого:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
           int pos, long id) { 
//If you're wondering, int pos is the position of the item selected (starting with 0) 
// what you want onClick 
} 

Ваш код:

@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     Intent details = new Intent(MainActivity.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); 
    } 

может пойти ниже инициализации блесны.

Надеюсь, это поможет! Удачи!