有路过片段之间对象的麻烦 [英] Having trouble passing object between fragments

查看:118
本文介绍了有路过片段之间对象的麻烦的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在花时间了好几天这个问题并获得同样的错误。我一直在想这是在操作栏中举行片段之间传递对象。请告诉我在哪里我犯这样的错误。在这里,我的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< D​​iscountFragment>(这一点,打折,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆