如何正确地将网格视图显示为片段

时间:2013-11-06 23:47:58

标签: android gridview android-fragments

这是我关于stackoverflow的第一篇文章,所以请原谅我可能遇到的任何与规范有关的缺点。 我试图在应用程序上有一个选项卡式视图,并让每个选项卡视图(只是一个普通的片段)成为gridview。我想我可以把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; 
}

正如我所说。这个片段是一个普通的片段,它被管理着#34;通过FragmentPagerAdapter。但是,我还有一个BaseAdapter的扩展,用于实际标签内的内容。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

你无法像这样夸大视图。膨胀呼叫需要一个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()));  
}