2015-06-21 4 views
1

Вот мой код я хочу, чтобы показать мои события в ListView, но ничего не показываетне notifiydatasetchanged показывает мой список

вот мой код

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_show_events_by_date); 
      Intent i = getIntent(); 
      dateString = i.getExtras().getString("Date"); 
      elist = (ListView) findViewById(R.id.eventList);      
      arraylist = new ArrayList<YourEvent>(); 
      adapter = new CustomAdapter(ShowEventsByDateActivity.this, arraylist); 
      getEvents();      
      elist.setAdapter(adapter); 
     } 

     private void getEvents() { 
        for(int a=0;a<StaticVariables.eventIds.size(); a++){      
         if(StaticVariables.eventDates.get(a).equals("6-12-2015")){ 
          eId.add(StaticVariables.eventIds.get(a)); 
          eTitle.add(StaticVariables.eventTitles.get(a)); 
          eDetail.add(StaticVariables.eventDetails.get(a)); 
          eType.add(StaticVariables.eventTypes.get(a)); 
          eDate.add(StaticVariables.eventDates.get(a)); 
          eTime.add(StaticVariables.eventTimes.get(a)); 
          eLocation.add(StaticVariables.eventLocations.get(a)); 
          eChoice.add(StaticVariables.eventChoices.get(a)); 
         }     
        }    
       arraylist.clear(); 
       for (int i = 0; i < eId.size(); i++) { 
        YourEvent ye = new YourEvent(eId.get(i), eTitle.get(i), 
          eType.get(i), eDetail.get(i), eDate.get(i), 
          eTime.get(i), eLocation.get(i), eChoice.get(i)); 
        arraylist.add(ye); 
       } 
       adapter.notifyDataSetChanged(); 
      } 

и вот мой customAdapter класс

class CustomAdapter extends BaseAdapter { 
     Context context; 
     LayoutInflater inflater; 
     private List<YourEvent> yeList = null; 
     private ArrayList<YourEvent> arraylist; 
     String title1[], detail1[], location1[], id1[]; 

     public CustomAdapter(Context context, List<YourEvent> yeList) { 
      this.yeList = yeList; 

      this.context = context; 
      inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      this.arraylist = new ArrayList<YourEvent>(); 
      this.arraylist.addAll(yeList); 
     } 

     public class ViewHolder { 
      ImageView iv; 
      // CheckBox cb; 
      TextView title, location, date, time, choiceText; 
     } 

     @Override 
     public View getView(final int position, View view, ViewGroup parent) { 
      final ViewHolder holder; 
      if (view == null) { 
       holder = new ViewHolder(); 
       view = inflater.inflate(R.layout.event_list, null); 
       // Locate the TextViews in listview_item.xml 
       holder.iv = (ImageView) view.findViewById(R.id.eIv); 
       holder.title = (TextView) view.findViewById(R.id.eTitle); 
       holder.date = (TextView) view.findViewById(R.id.eDate); 
       holder.location = (TextView) view.findViewById(R.id.eLocation); 
       holder.time = (TextView) view.findViewById(R.id.eTime); 
       holder.choiceText = (TextView) view.findViewById(R.id.choiceText); 
       // holder.cb = (CheckBox) view.findViewById(R.id.checkbox); 
       // holder.cb.setVisibility(View.GONE); 
       view.setTag(holder); 
      } else { 
       holder = (ViewHolder) view.getTag(); 
      } 
      // Set the results into TextViews 
      // holder.id.setText(yeList.get(position).getId()); 
      holder.title.setText(yeList.get(position).getTitle()); 
      holder.date.setText(yeList.get(position).getDate()); 
      holder.location.setText(yeList.get(position).getLocation()); 
      holder.time.setText(yeList.get(position).getTime()); 
      holder.choiceText.setText(eChoice.get(position)); 

      // Listen for ListView Item Click 
      view.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 
        Intent intent = new Intent(context, ViewEventActivity.class); 
        intent.putExtra("title", eTitle.get(position)); 
        intent.putExtra("type", eType.get(position)); 
        intent.putExtra("detail", eDetail.get(position)); 
        intent.putExtra("date", eDate.get(position)); 
        intent.putExtra("time", eTime.get(position)); 
        intent.putExtra("location", eLocation.get(position)); 
        startActivity(intent); 
       } 
      }); 
      return view; 
     } 
     @Override 
     public int getCount() { 
      // TODO Auto-generated method stub 
      return 0; 
     } 


     @Override 
     public Object getItem(int arg0) { 
      // TODO Auto-generated method stub 
      return null; 
     } 


     @Override 
     public long getItemId(int position) { 
      // TODO Auto-generated method stub 
      return 0; 
     } 
    } 

Я пробовал аналогичный код, в котором я получаю события из интернет-сервиса. Но я не знаю, почему этот код не работает. Plz помочь

+1

getCount не может вернуть 0. http://stackoverflow.com/questions/16338281/custom-adapter-getview-method-is-not-called/16338380#16338380 – Blackbelt

+0

не может поверить, что совершил такую ​​глупую ошибку:/ потратил впустую 3 часа, думая, что у меня была проблема в каком-то другом месте -_- спасибо alot sir :) хочу, чтобы я мог поддержать ваш ответ, но это всего лишь комментарий –

ответ

0

Просто поменять эти две линии:

getEvents();  //this would come after setAdapter    
elist.setAdapter(adapter); 

To

elist.setAdapter(adapter); 
getEvents(); 
+0

Я пробовал это, не работал –

1

Проблема заключается в этих линий в адаптере:

this.arraylist = new ArrayList<YourEvent>(); 
    this.arraylist.addAll(yeList); 

Это копирует исходные значения из ваш список (который пуст), в новый список, который ТОЛЬКО внутри вашего адаптера.

Затем, когда вы добавляете значения в свою активность, вы добавляете их в исходный список, который не совпадает с таковым в вашем адаптере.

Ссылка между двумя списками теряется, когда вы делаете .addAll(), так как она копируется по значению, а не копируется по ссылке.

Чтобы исправить это, просто:

1) Рефакторинг arraylist в список вместо ArrayList
2) установить this.arraylist = yeList вместо 2-х строк я написал выше.

Это правильно сохранит ссылку между двумя списками, поэтому, когда вы добавляете новые элементы в список в своей деятельности и вызываете notifyDataSetChanged(), он отображает их в списке.

+0

извините, я получил второй пункт, но не получил очко № 1, и почему вы хотите сделать это? –

+0

@ Ответ на вызов blackbelt решил мою проблему, я возвращался 0 в getcount -_- немой ошибкой:/ , но спасибо за ваше решение :) –

Смежные вопросы