2012-04-12 55 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

相关问题