2014-11-10 1 views
1

У меня есть пользовательский listview и spinner.First, я заполняю listview, а затем я нажимаю dropdown spinner.I выбираю элемент (город). Я хочу обновить listview с новым результатом. Но независимо от того, getview не является вызовом. Поэтому listview не обновляется. Это мой экран enter image description hereПользовательский счетчик не вызывает пользовательский просмотр списка?

Как я могу это сделать?

Я заполняю кок здесь

private void getCityListWithSpinner() { 

     cityListRequest = new CityListRequest(new AsyncListener() { 

      @Override 
      public void asyncOperationSucceded(Object obj, int queue) { 

       System.out.println("Objemizzz " + obj.toString()); 

       cityArrayList = (ArrayList<CityList>) obj; 
       Spinner ss = (Spinner) findViewById(R.id.cityfilmspinner); 

       CinemaCitySelector2 citySelector = new CinemaCitySelector2(); 
       cityList.add("Seçiniz"); 
       for (int i = 0; i < cityArrayList.size(); i++) { 
        cityList.add(cityArrayList.get(i).getCinemaCity()); 
        citySelector.CinemaCitySelector2(
          CinemaCityMoviePickerActivity.this, ss, cityList,2); 

       } 

      } 

CinemaCitySelector:

public class CinemaCitySelector2 implements OnItemSelectedListener { 

    Context context2; 
    Spinner spinner2; 
    CityListInCityRequest cityListInCityRequest2; 
    ArrayList<Cinema> cityListInCityArrayList2; 
    ListView list_cinema_movie_selectorr2; 
    CinemaListViewAdapter2 adapter2; 
    View row2; 
    int act2 = 0; 

    Spinner cityspinner; 

    public void CinemaCitySelector2(Context context, Spinner spinner, 
      ArrayList<String> cityList, int activityfrom) { 

     this.context2 = context; 
     this.spinner2 = spinner; 
     act2 = activityfrom; 

     // Declaring an Adapter and initializing it to the data pump 
     ArrayAdapter adapter = new ArrayAdapter(context, 
       android.R.layout.simple_list_item_1, cityList); 

     // Setting Adapter to the Spinner 
     spinner.setAdapter(adapter); 

     // Setting OnItemClickListener to the Spinner 
     spinner.setOnItemSelectedListener(CinemaCitySelector2.this); 

    } 

    // Defining the Callback methods here 
    public void onItemSelected(AdapterView parent, View view, int pos, long id) { 

     String city = spinner2.getItemAtPosition(pos).toString(); 


      LayoutInflater layoutInflater = LayoutInflater.from(context2); 
      row2 = layoutInflater.inflate(
        R.layout.activity_cinemacitymoviepicker, null, false); 
      list_cinema_movie_selectorr2 = (ListView) row2 
      .findViewById(R.id.listfilmincinema); 


     if (!city.equals("Seçiniz")) { 

      cityListInCityRequest2 = new CityListInCityRequest(
        new AsyncListener() { 

         @Override 
         public void asyncOperationSucceded(Object obj, int queue) { 

          // adapter.clear(); 
          // adapter.notifyDataSetChanged(); 
          // list_cinema_movie_selector.setAdapter(adapter); 
          System.out.println("Objemizzz " + obj.toString()); 

          cityListInCityArrayList2 = (ArrayList<Cinema>) obj; 
          // adapter.notifyDataSetChanged(); 
          adapter2 = new CinemaListViewAdapter2(context2, 
            R.layout.cinema_list, 
            cityListInCityArrayList2); 

           list_cinema_movie_selectorr2 
             .setAdapter(adapter2); 



         } 

         @Override 
         public void asyncOperationFailed(Object obj, int queue) { 
          // TODO Auto-generated method stub 
          System.out.println("Objemizzz2 " + obj.toString()); 

         } 
        }, city); 
     } 
    } 

    public void onNothingSelected(AdapterView arg0) { 
     // TODO Auto-generated method stub 

    } 

} 

CinemaListViewAdapter2:

public class CinemaListViewAdapter2 extends ArrayAdapter<Cinema> { 

    Context context; 
    int arraycount=0; 



    public CinemaListViewAdapter2(Context context, int resourceId, 
      ArrayList<Cinema> items) { 
     super(context, resourceId, items); 
     this.context = context; 
     arraycount=items.size(); 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     BlackBrandTextview cinemaName; 
     RelativeLayout cinemalist; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     Cinema rowItem = getItem(position); 


     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.cinema_list, null); 
      holder = new ViewHolder(); 
      holder.cinemaName = (BlackBrandTextview) convertView.findViewById(R.id.txt_cinema_name); 
      holder.cinemalist=(RelativeLayout)convertView.findViewById(R.id.cinemalist); 
      holder.cinemaName.setText(rowItem.getCinemaName()); 
      if(rowItem.getCinemaDistance()<5000){ 

       holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Pink)); 
       holder.cinemaName.setTextColor(context.getResources().getColor(R.color.Cinema_Black)); 

      } 
      else{ 
       holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Black)); 
       holder.cinemaName.setTextColor(context.getResources().getColor(R.color.White)); 

      } 

      convertView.setTag(holder); 
     } else{ 
      holder = (ViewHolder) convertView.getTag(); 

      holder.cinemaName.setText(rowItem.getCinemaName()); 


     } 

     if(rowItem.getCinemaDistance()<5000){ 

      holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Pink)); 
      holder.cinemaName.setTextColor(context.getResources().getColor(R.color.Cinema_Black)); 

     } 
     else{ 
      holder.cinemalist.setBackgroundColor(context.getResources().getColor(R.color.Cinema_Black)); 
      holder.cinemaName.setTextColor(context.getResources().getColor(R.color.White)); 

     } 


     holder.cinemaName.setText(rowItem.getCinemaName()); 

     return convertView; 
    } 
+0

Почему раздувать другую раскладку на блесны onItemSelected? Я предлагаю обновить исходный список из значения spinner, а затем обновить начальный адаптер - см. [Пример] (http://stackoverflow.com/a/19833695/4123144) – Wildroid

ответ

0

Я предлагаю вам позвонить

adapter2.notifyDataSetChange(); 

Но в любом случае нет необходимости инициализировать новый адаптер каждый раз. вы должны создать метод внутри адаптера, как это:

public void setMyArray(ArrayList<Cinema> items) { 
    myArray.clear(); 
    myArray.addAll(items); 
    notifyDataSetChange(); 
} 
1

Я бы создать метод для обновления адаптера раз выбран элемент на вашей блесны:

cityspinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view,int position, long id) { 
     city = (String) parent.getItemAtPosition(position); 
     resetCinema(city); //or onRestart(); 
} 

public void onNothingSelected(AdapterView<?> parent){ 
} 
}); 

И resetCinema(city) rechages мнение в зависимости от значения города. Вы можете сделать это вручную:

public void resetCinema(String city) { 
    //show list view elements depending on city 
} 

или просто вызвать обновление всей деятельности:

protected void onRestart() { 
    Intent refresh = new Intent(this, Main.class); 
    startActivity(refresh);//Start the same Activity 
    finish(); //finish Activity. 
}