2012-04-12 79 views
3

我無法在片段中獲取gridView的setOnItemClickListener。可能是什麼問題?

無法在item click on listener上獲取gridView

這裏是我的代碼::

public class MainMenuFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

     View view = inflater.inflate(R.layout.main_menu_fragment, container, false); 

     itemsGridViewObj = (GridView) view.findViewById(R.id.itemsGridView); 



     itemsGridViewObj.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long arg3) { 

       Log.d(TAG, "--> onItemClick listener...");  // Can not getting this method. 
       /*if(position == 1) { 
        FruitMenuFragment fruitMenuFragment = new FruitMenuFragment(); 
        fragmentTransaction.replace(android.R.id.content, fruitMenuFragment); 
        fragmentTransaction.commit(); 
       }*/ 
      } 
     }); 

     return view; 
    } 
}` 
+0

它實際上是隻包含ButtonView定製的GridView。我認爲這是導致問題得到onItemClickListener! – MobiDev 2012-04-12 09:49:51

+0

你的意思是在GridView的每個項目中都有一個按鈕?即在LisAdapter使用的佈局中。 – 2012-04-12 10:33:49

+0

是的。在這種情況下,我沒有得到onItemClickListener! – MobiDev 2012-04-12 10:39:49

回答

3

當使用片段發生在兩個階段的觀點的初始化。

該視圖僅在onCreateView方法之後被誇大(因此可訪問)。此方法僅用於使視圖膨脹並將其返回到碎片。

因此,任何關於查找視圖和設置onClickListeners的邏輯都應在onActivityCreated()函數中完成,因爲這是您可以訪問充氣視圖的第一個點。

看一看谷歌的文檔在http://developer.android.com/reference/android/app/Fragment.html#Lifecycle

下面是你的代碼調整以符合什麼事情讓我上面描述:

public class MainMenuFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
// Inflate the layout for this fragment 

    return inflater.inflate(R.layout.main_menu_fragment, container, false);  
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    GridView itemsGridViewObj = (GridView) findViewById(R.id.itemsGridView); 

    itemsGridViewObj.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
      long arg3) { 

     Log.d(TAG, "--> onItemClick listener..."); // You should see this now 
     /*if(position == 1) { 
      FruitMenuFragment fruitMenuFragment = new FruitMenuFragment(); 
      fragmentTransaction.replace(android.R.id.content, fruitMenuFragment); 
      fragmentTransaction.commit(); 
     }*/ 
    }}); 
} 
} 
+0

請看看我上面的評論... – MobiDev 2012-04-12 10:06:01

+0

不適合我。首先在'Fragment'中沒有'findViewById'方法,並且執行getView()。findViewById也不起作用。我不知道這個答案得到3票。 – vedant1811 2015-09-24 07:38:14

相關問題