2013-07-23 2 views
0

Я пытаюсь создать ListView с известными элементами. Все элементы уже находятся в ArrayList.Как реализовать ListView с повторяющимися элементами?

Я отслеживаю попадание дна в onScrollListener (onScroll method) и делаю это;

if(firstVisibleItem + visibleItemCount >= totalItemCount) 
    // move first item to end of arraylist 

проблема; когда свиток находится внизу, вновь добавленные элементы отображаются мгновенно. Я хочу, чтобы на экране отображались одни и те же видимые элементы. Показывать новые элементы, только если они прокручиваются.

Я просто хочу повторить то же самое, но не мог понять.

ответ

0

Список прокручивается до позиции totalItemCount. Если вы просто измените порядок элементов в своем списке, чтобы первый элемент был в конце, он отобразит новый порядок, но сохранит позицию, поэтому вы продолжите просмотр последнего элемента - что бы это ни было сейчас.

Похоже, что вы хотите, это круговой прокручиваемый ListView. Попробуйте это решение: Circular scrolling listview

+0

Спасибо, «круговой» было слово, которое я искал :) –

0

В основном вы можете реализовать простой listView в своей деятельности, но используя специальный базовый адаптер, который вы создаете самостоятельно (в пределах от BaseAdapter).

Вы можете что-то вроде этого, который принимает в качестве второго параметра списка:

package com.example.joignabilite; 

    import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

    public class ContactAdapter extends BaseAdapter { 

     // The list of contact 
     private List<Contact> mListP; 

     //COntexte of the adapter 
     private Context mContext; 

     //Mecanism to manage graphism from xml file 
     private LayoutInflater mInflater; 

     private int white = 0xFFFFFFFF; 
     private int grey = 0x33000000; 

     public ContactAdapter(Context context, List<Contact> aListP) { 
       mContext = context; 
       mListP = aListP; 
       mInflater = LayoutInflater.from(mContext); 
      } 

     public int getCount() { 
       return mListP.size(); 
      } 

     public Object getItem(int position) { 
       return mListP.get(position); 
      } 

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

      public View getView(int position, View convertView, ViewGroup parent) { 
        LinearLayout layoutItem; 
        //(1) : Réutilisation des layouts 
        if (convertView == null) { 
        //Initialisation de notre item à partir du layout XML "Contact_layout.xml" 
        layoutItem = (LinearLayout) mInflater.inflate(R.layout.item_contact, parent, false); 
        } else { 
        layoutItem = (LinearLayout) convertView; 
        } 

        //(2) : Récupération des TextView de notre layout  
        TextView tv_Nom = (TextView)layoutItem.findViewById(R.id.repertoire_item); 

        //(3) : Renseignement des valeurs  
        tv_Nom.setText(mListP.get(position).nom); 

        //On mémorise la position de la "Contact" dans le composant textview 
        tv_Nom.setTag(position);   

        if(position % 2 == 0) 
         layoutItem.setBackgroundColor(grey); 
        else 
         layoutItem.setBackgroundColor(white); 

        //On ajoute un listener 
        tv_Nom.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         //Lorsque l'on clique sur le nom, on récupère la position du "Contact" 
         Integer position = (Integer)v.getTag(); 

         //On prévient les listeners qu'il y a eu un clic sur le TextView "TV_Nom". 
         sendListener(mListP.get(position), position); 

        } 

        }); 

        //On retourne l'item créé. 
        return layoutItem; 
       } 

      /** 
      * Interface pour écouter les évènements sur le nom d'une Contact 
      */ 
      public interface ContactAdapterListener { 
       public void onClickNom(Contact item, int position); 
      } 

      //Contient la liste des listeners 
      private ArrayList<ContactAdapterListener> mListListener = new ArrayList<ContactAdapterListener>(); 
      /** 
      * Pour ajouter un listener sur notre adapter 
      */ 
      public void addListener(ContactAdapterListener aListener) { 
       mListListener.add(aListener); 
      } 

      private void sendListener(Contact item, int position) { 
       for(int i = mListListener.size()-1; i >= 0; i--) { 
        mListListener.get(i).onClickNom(item, position); 
       } 
      } 

    } 
+0

И вы могли бы поставить его видимым или нет, используя положение часть. – Underground72

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