2011-03-17 4 views
1

j'ai récupéré des textes + images de DB et l'a affiché dans une cellule quadrillée de gridview.ieeach se compose d'une image + un text.Maintenant je dois faire la pagination pour that.Ive de lui permettre de Afficher 4 cellules par page.Comment pourrais-je faire cela? Exemple de lien ou de code est très apprécié.pagination Gridview en android

Répondre

-1

Je pense que cela pourrait vous aider. Il couvre les bases de l'affichage de plusieurs éléments sur un GridView avec des exemples de code.

Android GridView Develop Guide

+0

ce lien m'aide à afficher les images dans gridview.Mais j'ai besoin de faire de la pagination – sanjay

0

J'espère que cette aide ..

J'ai trouvé un exemple sur le lien de la page Formation Android « http://developer.android.com/training/implementing-navigation/index.html » là, vous pouvez télécharger un exemple EffectiveNavigation.zip, est très utile pour les téléavertisseurs. De là, vous obtiendrez les bases des adaptateurs et des choses dont vous avez besoin pour cela.

la façon dont j'ai atteint une grille avec pagination est:

ayant 2 mises en page 1 avec le récepteur d'appel

<android.support.v4.view.ViewPager ... 

et une pour l'affichage de la grille

<GridView android:id="@+id/gridview" ... 

Note: la disposition de la grille si est enveloppé dans l'autre composant j'avais des problèmes.

Je charge le pager dans une activité, ici vous chargez le paginateur comme l'exemple d'entraînement android Je ne pas ajouter l'information ici seance est bien expliqué là-bas. ici aussi j'ai ma logique de charger le tableau d'éléments dans ce cas, vous les chargez de la réponse JSON je fais une AsyncTask une fois terminée le:

protected void onPostExecute(String params) { 
    refresList(); 
    progressDialog.dismiss(); 
} 

j'appelle la méthode refreshItems que cela notyfy l'adaptateur pager que quelque chose a changé "mGridPagerAdapter.notifyDataSetChanged();" De même, j'appelle une méthode de rafraîchissement des onglets pour recâbler les onglets à afficher.

public void refrestTabs() { 
    actionBar.removeAllTabs(); 
    for (int i = 0; i < mGridPagerAdapter.getCount(); i++) { 
     actionBar.addTab(actionBar.newTab() 
       .setText(mGridPagerAdapter.getPageTitle(i)) 
       .setTabListener(this)); 
    } 
} 

J'ai créé un GridAdapter qui s'étend FragmentPagerAdapter ici sur la méthode getItem charger le fragment

@Override 
public Fragment getItem(int i) { 
    Fragment fragment = new GridListFragment(); 
    Bundle args = new Bundle(); 
    args.putInt(GridListFragment.ARG_SECTION_NUMBER, i); 
    fragment.setArguments(args); 
    return fragment; 
} 

la GridListFragment de classe étend fragment et va ici votre logique pour charger la section du tableau vous vouloir. ici est la méthode onCreateView que j'utilise

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Bundle args = getArguments(); 
    position = args.getInt(ARG_SECTION_NUMBER); 
    View view = inflater.inflate(R.layout.comp_grid_view, container, false); 
    gridView = (GridView) view.findViewById(R.id.gridview); 
    applicationItems = new ArrayList<ApplicationItem>(); 
    int resID = R.layout.comp_app_list_item; 
    aa = new ApplicationListItemAdapter(view.getContext(), resID, applicationItems); 
    gridView.setAdapter(aa); 
    gridView.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View v, int position, 
       long id) { 
      mCallback.onApplicationSelected(applicationItems.get(position)); 
     }} 
    ); 
    return view; 
} 

I rafraîchir la grille lorsque la méthode onStart est appelée et je le fais de cette façon:

@Override 
public void onStart() { 
    applicationItems.clear(); 
    AppShortcutApplication appState = ((AppShortcutApplication)getActivity().getApplicationContext()); 
    List<ApplicationItem> l = appState.getCurrentListApplications(); 
    if (l != null){ 
     applicationItems.clear(); 
     applicationItems.addAll(l); 
     aa.notifyDataSetChanged();  
    } 
    super.onStart(); 
} 

Je passe les articles thru l'état d'application que vous pouvez trouver informations à ce sujet sur cette autre question lien "How do I pass data between Activities in Android application?"

Encore une fois ce n'est peut-être pas la meilleure approche, mais vous ne trouverez rien d'autre.

0

Voici ce que fait iam dans l'une de mes applications. J'espère que cela aide.

public static int currentPage = 0; 
private boolean endOfAlbums = false; 
private int lastItem = 0; 

albumGrid.setOnScrollListener(new AbsListView.OnScrollListener() { 
       @Override 
       public void onScrollStateChanged(AbsListView absListView, int scrollState) { 
        // Pause fetcher to ensure smoother scrolling when flinging // You can ignore this part 
        if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) { 
         mImageFetcher.setPauseWork(true); 
        } else { 
         mImageFetcher.setPauseWork(false); 
        } 
       } 

       @Override 
       public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

        final int _lastItem = firstVisibleItem + visibleItemCount; 
        if (_lastItem > 0 && totalItemCount > 0) 
         if (_lastItem == albums.size() && !endOfAlbums && lastItem != _lastItem) { 
          lastItem = _lastItem; 
          // Last item is fully visible. 
          loadAlbums(); 
         } 
       } 
      }); 

      return view; 
     } 

     private void loadAlbums() { 

      if (currentPage == 0) { 
       albums.clear(); 
       endOfAlbums = false; 
       lastItem = 0; 
       // get new releases 
       progressLayout.setVisibility(View.VISIBLE); 
      } else 
       progressLoadMore.setVisibility(View.VISIBLE); 

      if (Utility.isNetworkAvailable(getActivity())) { 

       new Thread(new Runnable() { 
        @Override 
        public void run() { 

         // get the serverAlbums 
         ArrayList<Album> serverAlbums = ServerAPI.getAllAlbums(session.getLanguage(), currentPage); 
         if (serverAlbums.size() > 0) 
          albums.addAll(serverAlbums); 
         else 
          endOfAlbums = true; 

         currentPage++; 

         myHandler.post(updateRunnable); 
        } 
       }).start(); 
       updateRunnable = new Runnable() { 
        @Override 
        public void run() { 

         if (albums.size() > 0) { 

          imageAdapter.notifyDataSetChanged(); 
          // get listview current position - used to maintain scroll position 
          int currentPosition = albumGrid.getFirstVisiblePosition(); 

          // Setting new scroll position 
          albumGrid.smoothScrollToPosition(currentPosition + 1, 0); 
         } else 
          tvNoAlbums.setVisibility(View.VISIBLE); 

         progressLayout.setVisibility(View.GONE); 
         progressLoadMore.setVisibility(View.GONE); 
        } 
       }; 
      } else { 
       Toast.makeText(getActivity(), R.string.check_connectivity, Toast.LENGTH_SHORT).show(); 
       progressLayout.setVisibility(View.GONE); 
       progressLoadMore.setVisibility(View.GONE); 
      } 

     }