有路过片段之间对象的麻烦 [英] Having trouble passing object between fragments
问题描述
我一直在花时间了好几天这个问题并获得同样的错误。我一直在想这是在操作栏中举行片段之间传递对象。请告诉我在哪里我犯这样的错误。在这里,我的code:
包com.restaurantexample.fragment;进口的java.util.ArrayList;
进口的java.util.List;进口android.app.Activity;
进口android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.ListView;进口com.restaurantexample.adapter.MenuItemAdapter;
进口com.restaurantexample.listener.OnMenuItem pressListener;
进口com.restaurantexample.main.R;
进口com.restaurantexample.menuitems.BaseOfMenuItems;
公共类DrinksFragment扩展片段实现OnItemClickListener { 私人列表< BaseOfMenuItems>饮料;
私人BaseOfMenuItems可口可乐,芬达,百事可乐,美年达,sevenUp,果汁,
水,柠檬水,mohito;
私人的ListView LV;
私人MenuItemAdapter适配器;
私人诠释layoutId;
私人诠释的productId;
私人诠释volumeId;
私人诠释priceId;
私人诠释imgId;
私人OnMenuItem pressListener menuItemListener; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
查看drinksView = inflater.inflate(R.layout.drinks_fragment,集装箱,
假);
饮料=新的ArrayList< BaseOfMenuItems>();
可口可乐=新BaseOfMenuItems(Кокакола,330мл,50,
R.drawable.ic_launcher);
drinks.add(可口可乐);
芬达=新BaseOfMenuItems(Фанта,330мл,50,
R.drawable.ic_launcher);
drinks.add(芬达);
百事可乐=新BaseOfMenuItems(Пепси,330мл,50,
R.drawable.ic_launcher);
drinks.add(百事可乐);
美年达=新BaseOfMenuItems(Миринда,330мл,50,
R.drawable.ic_launcher);
drinks.add(美年达);
sevenUp =新BaseOfMenuItems(7уп,330мл,50,
R.drawable.ic_launcher);
drinks.add(sevenUp);
汁=新BaseOfMenuItems(Сок,250мл,150,
R.drawable.ic_launcher);
drinks.add(汁);
水=新BaseOfMenuItems(Негазированнаявода,500мл,40,
R.drawable.ic_launcher);
drinks.add(水);
柠檬水=新BaseOfMenuItems(Домашнийлимонад,300мл,150,
R.drawable.ic_launcher);
drinks.add(柠檬水);
mohito =新BaseOfMenuItems(Мохитобезалкогольный,300мл,200,
R.drawable.ic_launcher);
drinks.add(mohito); layoutId = R.layout.drinks_list;
productId参数= R.id.product;
volumeId = R.id.volume;
priceId = R.id.price;
imgId = R.id.imgDrinks; LV =(ListView控件)drinksView.findViewById(R.id.drinkslistview);
适配器=新MenuItemAdapter(getActivity(),饮料,layoutId,
的productId,volumeId,priceId,0,imgId);
lv.setAdapter(适配器); 返回drinksView;
} @覆盖
公共无效onAttach(活动活动){
// TODO自动生成方法存根
super.onAttach(活动);
menuItemListener =(OnMenuItem pressListener)getActivity();
} @覆盖
公共无效onActivityCreated(捆绑savedInstanceState){
// TODO自动生成方法存根
super.onActivityCreated(savedInstanceState); lv.setOnItemClickListener(本);
} @覆盖
公共无效onItemClick(适配器视图<>为arg0,ARG1观,诠释ARG2,长ARG3){
// TODO自动生成方法存根 ** menuItemListener.onMenuItem pressed(drinks.get(ARG2)); **
}
}
这是第二个片段:
包com.restaurantexample.fragment;进口的java.util.ArrayList;
进口的java.util.List;进口android.app.Activity;
进口android.os.Bundle;
进口android.support.v4.app.Fragment;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ListView;进口com.restaurantexample.adapter.MenuItemAdapter;
进口com.restaurantexample.main.R;
进口com.restaurantexample.menuitems.BaseOfMenuItems;公共类BasketFragment扩展片段{ 私人列表< BaseOfMenuItems>菜单项;
私人的ListView LV;
私人MenuItemAdapter适配器;
私人诠释layoutId;
私人诠释的productId;
私人诠释portionId;
私人诠释priceId;
私人诠释imgId;
私人查看basketView; @覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
basketView = inflater.inflate(
R.layout.basket_fragment,集装箱,FALSE); 返回basketView;
} @覆盖
公共无效onAttach(活动活动){
// TODO自动生成方法存根
super.onAttach(活动);
setRetainInstance(真);
layoutId = R.layout.basket_list;
productId参数= R.id.basketProduct;
portionId = R.id.portion;
priceId = R.id.basketPrice;
imgId = R.id.imgBasket;
菜单项=新的ArrayList< BaseOfMenuItems>();
LV =(ListView控件)activity.findViewById(R.id.basketlistview); 适配器=新MenuItemAdapter(getActivity(),菜单项,layoutId,
的productId,0,priceId,portionId,imgId);
lv.setAdapter(适配器);
} 公共无效setMenuItem(BaseOfMenuItems英里){ menuItem.add(MI); }
}
和活动类:
包com.restaurantexample.main;进口com.restaurantexample.main.R;
进口com.restaurantexample.menuitems.BaseOfMenuItems;
进口com.restaurantexample.fragment.BasketFragment;
进口com.restaurantexample.fragment.DiscountFragment;
进口com.restaurantexample.fragment.MenuFragment;
进口com.restaurantexample.listener.OnMenuItem pressListener;
进口com.restaurantexample.listener.RestaurantTabListener;进口android.os.Bundle;
进口android.support.v7.app.ActionBar;
进口android.support.v7.app.ActionBarActivity;
进口android.support.v7.app.ActionBar.Tab;
进口android.view.Menu;
进口android.view.MenuInflater;公共类RestaurantMainPage扩展ActionBarActivity实现OnMenuItem $ P $ {pssListener @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState); 动作条actBar = getSupportActionBar();
actBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actBar.setDisplayShowTitleEnabled(真); 标签restMenuTab = actBar.newTab();
restMenuTab.setText(Меню);
restMenuTab.setTabListener(新RestaurantTabListener< MenuFragment>(这一点,菜单,MenuFragment.class));
actBar.addTab(restMenuTab); 标签discountTab = actBar.newTab();
discountTab.setText(%);
discountTab.setTabListener(新RestaurantTabListener< DiscountFragment>(这一点,打折,DiscountFragment.class));
actBar.addTab(discountTab); 标签basketTab = actBar.newTab();
basketTab.setText(Корзина);
basketTab.setTabListener(新RestaurantTabListener< BasketFragment>(这一点,菜篮子,BasketFragment.class));
actBar.addTab(basketTab); 如果(savedInstanceState!= NULL){
INT savedIndex = savedInstanceState.getInt(索引,0);
。getSupportActionBar()setSelectedNavigationItem(savedIndex);
}
} @覆盖
保护无效的onSaveInstanceState(捆绑outState){
// TODO自动生成方法存根
super.onSaveInstanceState(outState);
outState.putInt(指数,getSupportActionBar()getSelectedNavigationIndex());
} @覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
//充气菜单;如果是present这增加了项目操作栏。
MenuInflater吹气= getMenuInflater();
inflater.inflate(R.menu.restaurant_main_page,菜单);
返回super.onCreateOptionsMenu(菜单);
} @覆盖
公共无效onMenuItem pressed(BaseOfMenuItems英里){
// TODO自动生成方法存根
BasketFragment BF =(BasketFragment)getSupportFragmentManager()findFragmentById(R.id.basketlistview)。
** bf.setMenuItem(MI)**
}}
我的自定义适配器:
包com.restaurantexample.adapter;进口的java.util.List;进口com.restaurantexample.menuitems.BaseOfMenuItems;进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;公共类MenuItemAdapter延伸BaseAdapter { 私人上下文的背景下;
私人列表< BaseOfMenuItems>清单;
私人LayoutInflater吹气;
私人诠释layoutId;
私人诠释的productId;
私人诠释amountId;
私人诠释priceId;
私人诠释portionId;
私人诠释imgId; 公共MenuItemAdapter(上下文的背景下,列表与LT; BaseOfMenuItems>列表中,
INT layoutId,诠释的productId,诠释amountId,诠释priceId,诠释portionId,诠释imgId){
this.context =背景;
this.list =清单;
this.layoutId = layoutId;
this.productId = productId参数;
this.amountId = amountId;
this.priceId = priceId;
this.portionId = portionId;
this.imgId = imgId;
} @覆盖
公众诠释的getCount(){
// TODO自动生成方法存根
返回则为list.size();
} @覆盖
公共对象的getItem(INT位置){
// TODO自动生成方法存根
返回null;
} @覆盖
众长getItemId(INT位置){
// TODO自动生成方法存根
返回0;
} @覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){
// TODO自动生成方法存根
TextView的产品,数量,价格,部分;
ImageView的IMG; 吹气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
查看ItemView控件= inflater.inflate(layoutId,父母,假); 体积=(TextView中)itemView.findViewById(amountId);
volume.setText(list.get(位置).getAmount()); 产品=(TextView中)itemView.findViewById(productId参数);
product.setText(list.get(位置).getProduct()); 价格=(TextView中)itemView.findViewById(priceId);
price.setText(+ list.get(位置).getPrice()); IMG =(ImageView的)itemView.findViewById(imgId);
img.setImageResource(list.get(位置).getImage()); 返回ItemView控件;
}}
我表现出大胆的线条在那里我得到错误。而这个logcat的
10-05 00:40:24.187:E / AndroidRuntime(273):致命异常:主要
10-05 00:40:24.187:E / AndroidRuntime(273):显示java.lang.NullPointerException
10-05 00:40:24.187:E / AndroidRuntime(273):在com.restaurantexample.main.RestaurantMainPage.onMenuItem pressed(RestaurantMainPage.java:68)
10-05 00:40:24.187:E / AndroidRuntime(273):在com.restaurantexample.fragment.DrinksFragment.onItemClick(DrinksFragment.java:104)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.widget.AdapterView.performItemClick(AdapterView.java:284)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.widget.ListView.performItemClick(ListView.java:3382)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.widget.AbsListView $ PerformClick.run(AbsListView.java:1696)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.os.Handler.handleCallback(Handler.java:587)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.os.Handler.dispatchMessage(Handler.java:92)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.os.Looper.loop(Looper.java:123)
10-05 00:40:24.187:E / AndroidRuntime(273):在android.app.ActivityThread.main(ActivityThread.java:4627)
10-05 00:40:24.187:E / AndroidRuntime(273):在java.lang.reflect.Method.invokeNative(本机方法)
10-05 00:40:24.187:E / AndroidRuntime(273):在java.lang.reflect.Method.invoke(Method.java:521)
10-05 00:40:24.187:E / AndroidRuntime(273):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)
10-05 00:40:24.187:E / AndroidRuntime(273):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-05 00:40:24.187:E / AndroidRuntime(273):在dalvik.system.NativeStart.main(本机方法)
第一个片段的
在onAttach()函数,我对初始化回调menuItemListener有些怀疑。所述onAttach()函数是在调用中的序列的次序来初始化片段称为非常先。 getActivity()可能不准备尚未恢复相关的活动。
你为什么不只是初始化是这样的:
@覆盖
公共无效onAttach(活动活动){
// TODO自动生成方法存根
super.onAttach(活动);
menuItemListener =(OnMenuItem pressListener)的活性;
}
活动本身是在功能的参数可用。无需调用另一个函数来得到它。
I have been spending my time for several days with this question and getting same error. I have been trying to pass object between fragments which are held in action bar. Please tell me where i make the mistake. Here my code:
package com.restaurantexample.fragment;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.restaurantexample.adapter.MenuItemAdapter;
import com.restaurantexample.listener.OnMenuItemPressListener;
import com.restaurantexample.main.R;
import com.restaurantexample.menuitems.BaseOfMenuItems;
public class DrinksFragment extends Fragment implements OnItemClickListener {
private List<BaseOfMenuItems> drinks;
private BaseOfMenuItems cocaCola, fanta, pepsi, mirinda, sevenUp, juice,
water, lemonade, mohito;
private ListView lv;
private MenuItemAdapter adapter;
private int layoutId;
private int productId;
private int volumeId;
private int priceId;
private int imgId;
private OnMenuItemPressListener menuItemListener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View drinksView = inflater.inflate(R.layout.drinks_fragment, container,
false);
drinks = new ArrayList<BaseOfMenuItems>();
cocaCola = new BaseOfMenuItems("Кока кола", "330 мл", 50,
R.drawable.ic_launcher);
drinks.add(cocaCola);
fanta = new BaseOfMenuItems("Фанта", "330 мл", 50,
R.drawable.ic_launcher);
drinks.add(fanta);
pepsi = new BaseOfMenuItems("Пепси", "330 мл", 50,
R.drawable.ic_launcher);
drinks.add(pepsi);
mirinda = new BaseOfMenuItems("Миринда", "330 мл", 50,
R.drawable.ic_launcher);
drinks.add(mirinda);
sevenUp = new BaseOfMenuItems("7 уп", "330 мл", 50,
R.drawable.ic_launcher);
drinks.add(sevenUp);
juice = new BaseOfMenuItems("Сок", "250 мл", 150,
R.drawable.ic_launcher);
drinks.add(juice);
water = new BaseOfMenuItems("Негазированная вода", "500 мл", 40,
R.drawable.ic_launcher);
drinks.add(water);
lemonade = new BaseOfMenuItems("Домашний лимонад", "300 мл", 150,
R.drawable.ic_launcher);
drinks.add(lemonade);
mohito = new BaseOfMenuItems("Мохито безалкогольный", "300 мл", 200,
R.drawable.ic_launcher);
drinks.add(mohito);
layoutId = R.layout.drinks_list;
productId = R.id.product;
volumeId = R.id.volume;
priceId = R.id.price;
imgId = R.id.imgDrinks;
lv = (ListView) drinksView.findViewById(R.id.drinkslistview);
adapter = new MenuItemAdapter(getActivity(), drinks, layoutId,
productId, volumeId, priceId, 0, imgId);
lv.setAdapter(adapter);
return drinksView;
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
menuItemListener = (OnMenuItemPressListener) getActivity();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
lv.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
**menuItemListener.onMenuItemPressed(drinks.get(arg2));**
}
}
Here is second fragment:
package com.restaurantexample.fragment;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.restaurantexample.adapter.MenuItemAdapter;
import com.restaurantexample.main.R;
import com.restaurantexample.menuitems.BaseOfMenuItems;
public class BasketFragment extends Fragment {
private List<BaseOfMenuItems> menuItem;
private ListView lv;
private MenuItemAdapter adapter;
private int layoutId;
private int productId;
private int portionId;
private int priceId;
private int imgId;
private View basketView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
basketView = inflater.inflate(
R.layout.basket_fragment, container, false);
return basketView;
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
setRetainInstance(true);
layoutId = R.layout.basket_list;
productId = R.id.basketProduct;
portionId = R.id.portion;
priceId = R.id.basketPrice;
imgId = R.id.imgBasket;
menuItem = new ArrayList<BaseOfMenuItems>();
lv = (ListView) activity.findViewById(R.id.basketlistview);
adapter = new MenuItemAdapter(getActivity(), menuItem, layoutId,
productId, 0, priceId, portionId, imgId);
lv.setAdapter(adapter);
}
public void setMenuItem(BaseOfMenuItems mi) {
menuItem.add(mi);
}
}
And activity class:
package com.restaurantexample.main;
import com.restaurantexample.main.R;
import com.restaurantexample.menuitems.BaseOfMenuItems;
import com.restaurantexample.fragment.BasketFragment;
import com.restaurantexample.fragment.DiscountFragment;
import com.restaurantexample.fragment.MenuFragment;
import com.restaurantexample.listener.OnMenuItemPressListener;
import com.restaurantexample.listener.RestaurantTabListener;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar.Tab;
import android.view.Menu;
import android.view.MenuInflater;
public class RestaurantMainPage extends ActionBarActivity implements OnMenuItemPressListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actBar = getSupportActionBar();
actBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actBar.setDisplayShowTitleEnabled(true);
Tab restMenuTab = actBar.newTab();
restMenuTab.setText("Меню");
restMenuTab.setTabListener(new RestaurantTabListener<MenuFragment>(this, "menu", MenuFragment.class));
actBar.addTab(restMenuTab);
Tab discountTab = actBar.newTab();
discountTab.setText("%");
discountTab.setTabListener(new RestaurantTabListener<DiscountFragment>(this, "discount", DiscountFragment.class));
actBar.addTab(discountTab);
Tab basketTab = actBar.newTab();
basketTab.setText("Корзина");
basketTab.setTabListener(new RestaurantTabListener<BasketFragment>(this, "basket", BasketFragment.class));
actBar.addTab(basketTab);
if (savedInstanceState != null) {
int savedIndex = savedInstanceState.getInt("index", 0);
getSupportActionBar().setSelectedNavigationItem(savedIndex);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("index", getSupportActionBar().getSelectedNavigationIndex());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.restaurant_main_page, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onMenuItemPressed(BaseOfMenuItems mi) {
// TODO Auto-generated method stub
BasketFragment bf = (BasketFragment) getSupportFragmentManager().findFragmentById(R.id.basketlistview);
**bf.setMenuItem(mi);**
}
}
My custom adapter:
package com.restaurantexample.adapter;
import java.util.List;
import com.restaurantexample.menuitems.BaseOfMenuItems;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MenuItemAdapter extends BaseAdapter{
private Context context;
private List<BaseOfMenuItems> list;
private LayoutInflater inflater;
private int layoutId;
private int productId;
private int amountId;
private int priceId;
private int portionId;
private int imgId;
public MenuItemAdapter(Context context, List<BaseOfMenuItems> list,
int layoutId, int productId, int amountId, int priceId, int portionId, int imgId) {
this.context = context;
this.list = list;
this.layoutId = layoutId;
this.productId = productId;
this.amountId = amountId;
this.priceId = priceId;
this.portionId = portionId;
this.imgId = imgId;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView product, volume, price, portion;
ImageView img;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(layoutId, parent, false);
volume = (TextView) itemView.findViewById(amountId);
volume.setText(list.get(position).getAmount());
product = (TextView) itemView.findViewById(productId);
product.setText(list.get(position).getProduct());
price = (TextView) itemView.findViewById(priceId);
price.setText("" + list.get(position).getPrice());
img= (ImageView) itemView.findViewById(imgId);
img.setImageResource(list.get(position).getImage());
return itemView;
}
}
I showed lines in bold where i get error. And this the logcat
10-05 00:40:24.187: E/AndroidRuntime(273): FATAL EXCEPTION: main
10-05 00:40:24.187: E/AndroidRuntime(273): java.lang.NullPointerException
10-05 00:40:24.187: E/AndroidRuntime(273): at com.restaurantexample.main.RestaurantMainPage.onMenuItemPressed(RestaurantMainPage.java:68)
10-05 00:40:24.187: E/AndroidRuntime(273): at com.restaurantexample.fragment.DrinksFragment.onItemClick(DrinksFragment.java:104)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.widget.ListView.performItemClick(ListView.java:3382)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.os.Handler.handleCallback(Handler.java:587)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.os.Handler.dispatchMessage(Handler.java:92)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.os.Looper.loop(Looper.java:123)
10-05 00:40:24.187: E/AndroidRuntime(273): at android.app.ActivityThread.main(ActivityThread.java:4627)
10-05 00:40:24.187: E/AndroidRuntime(273): at java.lang.reflect.Method.invokeNative(Native Method)
10-05 00:40:24.187: E/AndroidRuntime(273): at java.lang.reflect.Method.invoke(Method.java:521)
10-05 00:40:24.187: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-05 00:40:24.187: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-05 00:40:24.187: E/AndroidRuntime(273): at dalvik.system.NativeStart.main(Native Method)
In onAttach() function of the first fragment, I have some doubt about initializing the callback menuItemListener. The onAttach() function is called at the very first in the order of sequence of calls to initialize a fragment. getActivity() may not be ready yet to return the associated activity.
Why don't you just initialize like this:
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
menuItemListener = (OnMenuItemPressListener) activity;
}
activity itself is available in the parameter of the function. No need to call another function to get it.
这篇关于有路过片段之间对象的麻烦的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!