2011-03-17 70 views
1

我從數據庫檢索文本+圖像,並將其顯示在gridview.ieeach gridview單元格包含一個圖像+一個文本。現在我要做的分頁,我想讓它每頁顯示4個單元格。我該怎麼做?例如鏈接或代碼非常感謝。在android中的Gridview分頁

回答

-1

我認爲這可能對你有所幫助。它涵蓋了使用代碼示例在GridView上顯示多個項目的基礎知識。

Android GridView Develop Guide

+0

此鏈接可幫助我在gridview中顯示圖像。但我需要做分頁 – sanjay 2011-03-17 11:46:57

0

我希望這有助於..

我發現了Android培訓頁面鏈接「http://developer.android.com/training/implementing-navigation/index.html」那裏,你可以下載一個例子EffectiveNavigation.zip的一個例子,是尋呼機非常有用的。從那裏你將獲得適配器的基礎知識和你需要的東西。具有與尋呼機

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

,一個用於網格視圖

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

注2個佈局1

:在網格佈局

我實現了電網與分頁的方式是如果被包裝在其他組件中,我遇到了問題。

我在一個Activity中加載尋呼機,在這裏你加載paginator作爲android訓練的例子我不在這裏添加信息seance在那裏很好的解釋。 這裏還有我有我的邏輯來加載在這種情況下,項目從JSON響應加載它們的陣列我做的AsyncTask一旦完成上:

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

我稱之爲refreshItems方法,這將notyfy尋呼機適配器的東西已經改變「mGridPagerAdapter.notifyDataSetChanged();」以及我調用刷新選項卡方法來重新顯示要顯示的選項卡。

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

我已經創建了一個在這裏延伸FragmentPagerAdapter上的getItem方法GridAdapter加載片段

@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; 
} 

類GridListFragment擴展片段,並在這裏不用你的邏輯來加載陣列的部分,你想。 這裏是我使用

@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; 
} 

我刷新網格時OnStart方法被調用,我做這種方式onCreateView方法:

@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(); 
} 

我直通你可以找到應用程序狀態的項目關於另一個問題上的信息鏈接「How do I pass data between Activities in Android application?

再次,這可能不是最好的方法,但找不到其他任何東西。

0

這是iam在我的一個應用程序中做的事情。希望能幫助到你。

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); 
      } 

     }