我工作的一个小应用程序,其中包含的活动与 NavigationDrawer
,我已经放在使用活性片段 FragmentManager
和 FragmentTrancation
。问题是,我有一个的GridView
不出现的片段中。
这是我的主要活动类。
公共类主要扩展活动{
DrawerLayout drawerlayout;
ListView控件LVdrawer;
ImageView的toplogo;
查看的rL;
FragmentManager调频= getFragmentManager();
FragmentTransaction反式= FM.beginTransaction();
@覆盖
保护无效的onCreate(包savedInstanceState){
// TODO自动生成方法存根
super.onCreate(savedInstanceState);
的setContentView(R.layout.navigation_drawer);
AddApps Aapps =新AddApps();
drawerlayout =(DrawerLayout)findViewById(R.id.drawer_layout);
LVdrawer =(ListView控件)findViewById(R.id.left_drawer);
LVdrawer.setAdapter(新CustomAdapter(这一点,1));
Trans.add(R.id.content_frame,Aapps,AddAppsF);
Trans.addToBackStack(AddApps);
Trans.commit();
}
片段类:
公共类AddApps扩展片段{
GridView的网格;
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
查看addapp = inflater.inflate(R.layout.addbusiness,集装箱,假);
格=(GridView控件)addapp.findViewById(R.id.gridView1);
返回addapp;
}
@覆盖
公共无效onActivityCreated(包savedInstanceState){
// TODO自动生成方法存根
super.onActivityCreated(savedInstanceState);
grid.setAdapter(新Customadapter(getActivity()));
}
}
类Customadapter扩展了BaseAdapter {
ArrayList的<行>行;
的String []的名称;
语境℃;
INT [] IDS;
私人LayoutInflater充气;
公共Customadapter(上下文C){
// TODO自动生成构造函数存根
this.c = C;
充气= LayoutInflater.from(C);
行=新的ArrayList<行>();
名称=新DrawerData()getnames()。
IDS =新DrawerData()getids()。
的for(int i = 0; I< ids.length;我++){
row.add(新行(名称[I],IDS [I]));
}
}
@覆盖
公众诠释getCount将(){
// TODO自动生成方法存根
返回row.size();
}
@覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回row.get(位置);
}
@覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回的位置;
}
@覆盖
公共查看getView(INT位置,查看convertView,ViewGroup中父){
// TODO自动生成方法存根
ViewHolder1支架=无效;
查看singleview = convertView;
如果(convertView == NULL){
singleview = inflater.inflate(R.layout.singleapp,父母,假);
持有人=新ViewHolder1(singleview);
singleview.setTag(保持器);
}
其他 {
支架=(ViewHolder1)singleview.getTag();
}
行RR = row.get(位置);
holder.img.setImageResource(rr.imageid);
holder.det.setText(rr.names);
返回singleview;
}
}
类ViewHolder1 {
ImageView的IMG;
TextView的DET;
ViewHolder1(视图v){
IMG =(ImageView的)v.findViewById(R.id.detail_logo);
DET =(TextView中)v.findViewById(R.id.detail);
}
}
解决方案
你不尊重活动
的生命周期。当你这样做
FragmentManager FM = getFragmentManager();
FragmentTransaction反式= FM.beginTransaction();
方法前的onCreate
被调用,你没有在活动
正确创建。
此举code到的onCreate
方法:
@覆盖
保护无效的onCreate(包savedInstanceState){
// TODO自动生成方法存根
super.onCreate(savedInstanceState);
的setContentView(R.layout.navigation_drawer);
AddApps Aapps =新AddApps();
drawerlayout =(DrawerLayout)findViewById(R.id.drawer_layout);
LVdrawer =(ListView控件)findViewById(R.id.left_drawer);
LVdrawer.setAdapter(新CustomAdapter(这一点,1));
FragmentManager调频= getFragmentManager();
FragmentTransaction反式= FM.beginTransaction();
Trans.add(R.id.content_frame,Aapps,AddAppsF);
Trans.addToBackStack(AddApps);
Trans.commit();
}
I am working on a small application which contains Activity with NavigationDrawer
, and i have placed a fragment on that activity using FragmentManager
and FragmentTrancation
. Problem is, I have a GridView
inside a fragment which doesn't appear.
Here is my Main Activity Class.
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();
}
Fragment Class:
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);
}
}
解决方案
You're not respecting the Activity
lifecycle. When you do this
FragmentManager FM = getFragmentManager();
FragmentTransaction Trans = FM.beginTransaction();
before the method onCreate
being called, you don't have the Activity
properly created.
Move that code to the onCreate
method:
@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();
}