2013-06-25 37 views
1

我想獲得在GridView中的位置的項目視圖,我不知道該怎麼做。如何通過GridView中的位置獲取項目視圖(在onCreateView中)?

我試過遍歷gridView.getChildCount(),但它返回0(https://stackoverflow.com/a/8944678/1788704)。

當我打電話給gridView.getCount(),它返回25(GridView的項目的確切數量)。

當我嘗試在getCount循環中調用getChildAt(position)時,我得到一個NPE。

我想要做的就是獲取項目視圖以在項目視圖中獲取2個ImageView,並在每個項目視圖中設置一個setOnClickListener()

此刻,我在gridView的setOnItemClickListener()中設置了這些偵聽器。

但是,第一次點擊我的imageViews,偵聽器沒有設置,那麼它沒關係(因爲它被初始化,一旦單元格被點擊)。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

      [... ... ...] 

      gridView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

       ImageView shutterDown = (ImageView) v.findViewById(R.id.grid_item_shutter_down); 
       shutterDown.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         Toast.makeText(getActivity(), "Down", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

       ImageView shutterUp = (ImageView) v.findViewById(R.id.grid_item_shutter_up); 
       shutterUp.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         Toast.makeText(getActivity(), "Up", Toast.LENGTH_SHORT).show(); 
        } 
       }); 

// The rest of the onItemClickListener (normal behavior). 
      } 
     }); 
    return rootView; 
} 

這裏是我的網格單元的截圖: Grid cell

+1

我通常在自定義適配器中做這種事情。只需擴展BaseAdapter'getView()'並將你的'onClicks()'放在那裏 –

+0

我有我自己的適配器...我很笨。我之前不想使用它,因爲我必須在我的onClicks中創建一個線程(套接字內部),但是使用AsyncTask它應該沒問題。謝謝。 – kmas

回答

0

gridView.getCount()是你的適配器的大小,所以你必須在適配器

gridView.getChildCount 25項( )是網格的子節點的大小,所以當你調用它時網格沒有子節點,所以在這個時候你可能還沒有在屏幕上繪製。

這就是爲什麼你得到一個NPE,因爲你沒有子視圖來獲取。

+0

因爲它在onCreateView方法中,所以您可能是對的。 – kmas

相關問題