0

这是我在 stackoverflow 上的第一篇文章,所以请原谅我在规范方面可能存在的任何缺点。我试图在应用程序上有一个选项卡式视图,并让每个选项卡式视图(只是一个普通片段)成为一个网格视图。我以为我可以将gridview的初始化代码放在onCreateView中,但是我已经解决这个问题几个小时了,并且gridview在findviewbyid调用中返回null。这是相关代码(我尽量不要让这个问题变得压倒性,所以我不会发布所有代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    //            View rootView = inflater.inflate(
    //                    R.layout.fragment_main_ingredient_dummy, container, false);

    GridView gridview = (GridView) inflater.inflate(R.id.gridview, container);
    gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
        }
    });

    gridview.setAdapter(new ImageAdapter(getActivity()));  

    return gridview; 
}

就像我说的。该片段是一个普通片段,它由 FragmentPagerAdapter“管理”。但是,我还有一个 BaseAdapter 的扩展,用于实际选项卡中的内容。

先感谢您!

4

1 回答 1

0

你不能夸大这样的视图。inflate 调用需要一个 R.layout。参考,而不是 R.id。参考。

您应该只在 onCreateView 中创建视图。然后在 onViewCreated 中做其他工作。

private GridView mGridView;

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

mGridView = (GridView) inflater.inflate(R.layout.frag_grid, container);


return mGridView; 
}

@Override
public void onViewCreated(){
 mGridView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        Toast.makeText(getActivity(), "" + position, Toast.LENGTH_SHORT).show();
    }
});

mGridView.setAdapter(new ImageAdapter(getActivity()));  
}
于 2013-11-06T23:58:01.913 回答