2015-07-28 3 views
0

Я пытаюсь сделать приложение, которое получает разные фотографии с онлайн-сервера в зависимости от маркера, которого пользователь нажал. Моя проблема в том, что, например, если пользователь нажал marker1, они получат фотографии для marker1, но когда они попытаются увидеть фотографии для marker2, мой сетчатый просмотр продолжает показывать фотографии для marker1 (без изменений - удаление/добавление новых фотографий). То же самое, если пользователь начинает с marker2.Android удалить все элементы в gridview (refresh gridview)

Поэтому я не понимаю, что я делаю неправильно, поскольку я устанавливаю адаптер на нуль gridView1.setAdapter(null);, а затем я ищу изображения для щелкнутого маркера, а затем отображаю их в gridview. Но мои снимки из gridview не исчезнут, хотя я установил адаптер в нуль.

Вот мой основной код:

public static ArrayList<String> image_urls = new ArrayList<>(); 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_poi_photos); 

      // Check for double values - clear the gridview. reload the images 
      //image_urls.clear(); 
      gridView1 = (GridView) findViewById(R.id.gridview); 
      if (gridView1.getChildCount() != 0 || image_urls != null) { 
       gridView1.setAdapter(null); 
      } 
      if (image_urls.isEmpty()) 
      { 
       getImages(); 
      } 

      final ImageAdapter adapter = new ImageAdapter(this); 
      adapter.notifyDataSetChanged(); 
      gridView1.setAdapter(adapter); 
    } 


    // GETTING PHOTOS FROM DATABASE 
    protected void showList() { 
     try { 
      JSONObject jsonObj = new JSONObject(myJSON); 
      photos = jsonObj.getJSONArray(TAG_RESULTS); 

      for (int i = 0; i < photos.length(); i++) { 
       JSONObject c = photos.getJSONObject(i); 
       String email_user = c.getString(TAG_EMAIL_USER); 
       String poi_name = c.getString(TAG_POI_NAME); 
       String photo_url = c.getString(TAG_PHOTO_URL); 

       if ((poi_name.substring(0, 4)).equals(map.markername) && photo_url!=null) { 
        // add to the picasso gallery 
        photo_url="http:/xxxxx/photos/"+photo_url; 
        image_urls.add(photo_url); 
       } 

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


    public void getImages() { 
     class GetDataJSON extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 
       DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); 
       HttpPost httppost = new HttpPost("http://xxxxx/table_photo_out.php"); 

       // Depends on your web service 
       httppost.setHeader("Content-type", "application/json"); 

       InputStream inputStream = null; 
       String result = null; 
       try { 
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity(); 

        inputStream = entity.getContent(); 
        // json is UTF-8 by default 
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); 
        StringBuilder sb = new StringBuilder(); 

        String line = null; 
        while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
        } 
        result = sb.toString(); 
       } catch (Exception e) { 
        // Oops 
       } finally { 
        try { 
         if (inputStream != null) inputStream.close(); 
        } catch (Exception squish) { 
        } 
       } 
       return result; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       myJSON = result; 
       showList(); 
      } 
     } 
     GetDataJSON g = new GetDataJSON(); 
     g.execute(); 
    } 

Любая идея, что может быть неправильно или если есть способ лучше?

+0

Вы устанавливаете адаптер в getImages? – Pavya

+0

@ user3676184 нет, я только установил свой адаптер в onCreate после вызова getImages() – Diana

+0

, вы получаете все изображения в списке или массиве. означает, как вы повторяете все изображения? – Pavya

ответ

1

Это потому, что в первый раз, что вы получаете от клика marker1, добавляется в ваш image_urls. Когда вы нажимаете на маркер2, тогда в это время доступны все данные. Для этого вам нужно установить image_urls = new ArrayList <>(); в каждом клике.

1

Попробуйте установить image_urls = null, когда вы нажали.