在一个碎片中实现GridView时遇到的问题

3

我正在开发一个小应用程序,其中包含带有NavigationDrawer的活动,并使用FragmentManagerFragmentTrancation在该活动上放置了一个片段。问题是,我在片段中放置了一个GridView,但它并没有出现。

这是我的主要活动类。

public class Main extends Activity {
    DrawerLayout drawerlayout;
    ListView LVdrawer;
    ImageView toplogo;
    View rL;
    FragmentManager FM = getFragmentManager();
    FragmentTransaction Trans = FM.beginTransaction();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.navigation_drawer);
        AddApps Aapps = new AddApps();
        drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        LVdrawer = (ListView) findViewById(R.id.left_drawer);
        LVdrawer.setAdapter(new CustomAdapter(this, 1));
        Trans.add(R.id.content_frame, Aapps, "AddAppsF");
        Trans.addToBackStack("AddApps");
        Trans.commit();
    }

片段类:

 public class AddApps extends Fragment {
        GridView grid;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View addapp=inflater.inflate(R.layout.addbusiness, container, false);
            grid=(GridView) addapp.findViewById(R.id.gridView1);
        return addapp;

    }
    @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onActivityCreated(savedInstanceState);
            grid.setAdapter(new Customadapter(getActivity()));
        }
    }
    class Customadapter extends BaseAdapter {
        ArrayList<Row> row;
        String[] names;
        Context c;
        int[] ids;
        private LayoutInflater inflater;

        public Customadapter(Context c) {
            // TODO Auto-generated constructor stub
            this.c = c;
            inflater=LayoutInflater.from(c);

            row = new ArrayList<Row>();
                names = new DrawerData().getnames();
                ids = new DrawerData().getids();

            for (int i = 0; i < ids.length; i++) {
                row.add(new Row(names[i], ids[i]));
            }
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return row.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return row.get(position);
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder1 holder = null;
            View singleview = convertView;

            if (convertView == null) {
                singleview = inflater.inflate(R.layout.singleapp, parent, false);
                holder = new ViewHolder1(singleview);
                singleview.setTag(holder);
            }

            else {
                holder = (ViewHolder1) singleview.getTag();

            }
            Row rr = row.get(position);
            holder.img.setImageResource(rr.imageid);
            holder.det.setText(rr.names);

            return singleview;
        }

    }

    class ViewHolder1 {
        ImageView img;
        TextView det;

        ViewHolder1(View v) {
            img = (ImageView) v.findViewById(R.id.detail_logo);
            det = (TextView) v.findViewById(R.id.detail);
        }
    }

你确定 new DrawerData().getids(); 返回至少一个项目吗? - Egor
是的,它正在返回项目,并且我已经通过Logcat进行了验证... - Harsha
你能否将你的代码片段中的 View addapp=inflater.inflate(R.layout.addbusiness, container, false); 替换为 View addapp=inflater.inflate(R.layout.some_dummy_layout, container, false);?其中 some_dummy_layout 是一个只包含简单文本视图的布局。这样做只是为了检查该片段是否正常工作。 - mromer
实际上,我在片段中有两个可见的TextView,甚至GridView也是可见的,但其内容不可见...... - Harsha
1个回答

0

你没有尊重Activity的生命周期。当你这样做时

FragmentManager FM = getFragmentManager();
FragmentTransaction Trans = FM.beginTransaction();

在调用onCreate方法之前,您还没有正确创建Activity

将该代码移至onCreate方法中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.navigation_drawer);
    AddApps Aapps = new AddApps();
    drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    LVdrawer = (ListView) findViewById(R.id.left_drawer);
    LVdrawer.setAdapter(new CustomAdapter(this, 1));

    FragmentManager FM = getFragmentManager();
    FragmentTransaction Trans = FM.beginTransaction();

    Trans.add(R.id.content_frame, Aapps, "AddAppsF");
    Trans.addToBackStack("AddApps");
    Trans.commit();
}

谢谢您的回复,我是编程新手,我按照您提到的更改了我的代码... - Harsha
有没有解决我的问题的方案? - Harsha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接