2013-06-28 4 views
0

Я использую следующий код для моего ListView ..Бесконечные ListView ведет себя как простой ListView

Мои FragmentActivity

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
      View view = inflater.inflate(R.layout.home, container, false);  
      listView = (ListView) view.findViewById(R.id.listView); 
      listView.setAdapter(new CustomArrayAdapterForHome(mContext,questions)); 

      return view; 
    } 

Вот адаптер для ListView

@SuppressLint("DefaultLocale") 
    public class CustomArrayAdapterForHome extends EndlessAdapter 
    { 
     private final LayoutInflater inflator; 
     protected ImageLoader imageLoader; 
     private DisplayImageOptions options; 

     private RotateAnimation rotate=null; 
     private View pendingView = null; 

     public CustomArrayAdapterForHome(Context ctx,ArrayList<Question> questionList) 
     { 
      super(new ArrayAdapter<Question>(ctx, R.layout.question_adapter_layout, questionList)); 

      inflator = mContext.getLayoutInflater(); 
      imageLoader = ImageLoader.getInstance(); 

      options = new DisplayImageOptions.Builder() 
       .cacheInMemory() 
       .cacheOnDisc() 
       .showImageForEmptyUri(R.drawable.user_male) 
       .displayer(new RoundedBitmapDisplayer(5)) 
       .build(); 

      rotate=new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 
        0.5f, Animation.RELATIVE_TO_SELF, 
        0.5f); 
      rotate.setDuration(600); 
      rotate.setRepeatMode(Animation.RESTART); 
      rotate.setRepeatCount(Animation.INFINITE); 
     } 

     class ViewHolder 
     { 
      // MY CODE 
     } 

     @Override 
     public int getCount() { 
      return questions.size(); 
     } 

     @Override 
     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     {  
      final Question question = questions.get(position); 
      final OpenionUser myUser = question.getUser(); 
      // MY CODE 


      return view; 
     } 



      @Override 
      protected View getPendingView(ViewGroup parent) 
      { 
      View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, null); 

      pendingView = row.findViewById(android.R.id.text1); 
      pendingView.setVisibility(View.GONE); 
      pendingView=row.findViewById(R.id.throbber); 
      pendingView.setVisibility(View.VISIBLE); 
      startProgressAnimation(); 

      return(row); 
      } 


     private void startProgressAnimation() 
     { 
      if (pendingView!=null) 
      { 
        pendingView.startAnimation(rotate); 
      } 
     } 

     @Override 
     protected void appendCachedData() 
     { 

     } 

     @Override 
     protected boolean cacheInBackground() throws Exception 
     { 
      getQuestions(); 
      return true; 
     } 
    } 

выше код просто ведут себя как простой ListView, cacheInBackground или getPendingView не получают вызов. Дальше. Еще я хочу добавить headerView и его тоже не работать.

Что мне недостает в этом?

ответ

1

Большая часть кода, который у вас есть, не принадлежит к EndlessAdapter. Цитирование the documentation:

Он предназначен для обертывания вокруг другого адаптера, где у вас есть свои «настоящие» данные. Следовательно, это следует за рисунком Decorator, дополняющим ваш текущий адаптер новой Endless Technology (TM).

Итак, первое, создать регулярные ArrayAdapter, и получить все стили и вещи, которые вы хотите (например, ваш getView() реализации). Затем создайте подкласс EndlessAdapter, который добавит в «бесконечность».

отметить:

  • EndlessAdapter подкласс не должен переопределить getView(), как то, где бесконечное поведение добавляют

  • EndlessAdapter подкласс не должен переопределить getCount(), как управляется EndlessAdapter само осуществление

Возможно, вы захотите изучить the sample app, чтобы увидеть, как он реализует подклассы EndlessAdapter.

Или, начиная с EndlessAdapterwill not work with header views, вам может потребоваться просто переключиться на другое бесконечное решение списка или свернуть самостоятельно.

+0

Хорошо, я сделал работу, спасибо за советы. Пожалуйста, одна небольшая проблема. Я делаю getQuestions() в cacheInBackground. и adapter.setRunInBackground (false); В моей асинхронной задаче getQuestion() после получения модифицированного массива readyListener.onItemsReady (вопросы); работает отлично. Но если я не получу ничего, то i-e мой массив не будет изменен, cacheInBackground будет бесконечно повторяться. что делать? –

+0

@MuhammadUmar: вы должны возвращать 'false' из' cacheInBackground() ', когда вы достигли конца ваших данных. – CommonsWare

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