2014-09-01 72 views
3

我正在处理一个包含Activity与NavigationDrawer的小应用程序,并且我已经使用FragmentManager和在该活动上放置了一个片段。问题是,我有一个GridView里面没有出现的片段。 这是我的主要活动课。在一个片段中实现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); 
     } 
    } 
+0

你确定新DrawerData()getids();至少返回一个项目? – Egor 2014-09-01 13:45:20

+0

是它的返回项目,我已通过Logcat验证它... – Harsha 2014-09-02 06:11:14

+0

你可以在你的片段中替换'查看addapp = inflater.inflate(R.layout.addbusiness,container,false);'查看addapp = inflater.inflate (R.layout.some_dummy_layout,container,false);'?其中'some_dummy_layout'是一个带简单文本视图的布局。它只是看看片段是否在做好工作 – mromer 2014-09-02 11:47:31

回答

0

你不尊重Activity生命周期。当你的方法onCreate被调用之前做到这一点

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

,你没有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(); 
} 
+0

感谢您的回复,我'新的编程和我改变了我的代码,你提到... – Harsha 2014-09-01 13:54:29

+0

我的问题的任何解决方案? – Harsha 2014-09-01 13:55:29