2016-11-10 35 views
0

我在我的全局变量中声明一个名为Controller的全局变量有点问题,这个全局变量是从应用程序扩展而来的。ApplicationContext与全局变量在按下后丢失

当我开始活动AI有Controller(它是一个购物车)0项的ArrayList,我继续活动B,点击,我添加一个项目“控制器”,我回去(后退按钮)上活动A和我得到一个数组列表仍然在0项目有什么不对?

我的控制器类:

public class Controller extends Application { 

    public static final int SIGNUP_REQUEST = 98; // The request code 
    public static final int SIGNIN_REQUEST = 99; 
    private User mUser;// Instance de l'utilisateur connecté 
    private Cart mCart = new Cart(); // Panier 
    private Tracker mTracker; // Analytics 
    private Session mSession; 
    private SessionModule mSessionModule; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 

    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
     mSessionModule = new SessionModule(base); 
     mSession = mSessionModule.getSession(); 
    } 

    public Cart getCart() { 

     return mCart; 
    } 

    public Session getSession() { 
     return mSession; 
    } 

    public User getUser() { 
     return mUser; 
    } 

    public void setUser(User mUser) { 
     this.mUser = mUser; 
    } 
} 

我的购物车类:

public class Cart { 
    private ArrayList<Item> items i= new ArrayList<Item>(); 
    private Store mStore; 

    public Item getItem(int pPosition) { 

     return items.get(pPosition); 
    } 

    public void addItem(Item item) { 
     items.add(item); 
    } 

    public void removeItem(int pPosition) { 
     items.remove(pPosition); 
    } 

    public void clear() { 
     items.clear(); 
    } 

    public int size() { 
     return items.size(); 
    } 

    public ArrayList<Item> getItems() { 

     return items; 

    } 
} 

一个BaseActivity其获得的onCreate控制器的实例():

public abstract class BaseActivity extends AppCompatActivity { 
    public Session mSession; 
    public Controller mController; 

    public static final int SIGNUP_REQUEST = 98; // The request code 
    public static final int SIGNIN_REQUEST = 99; 

    public static final int LOGIN_REQUEST = 1; // The request code 
    public static final int REGISTER_REQUEST = 2; // The request code 

    @Override protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mController=(Controller)getApplicationContext(); 

     mSession=mController.getSession(); 

    } 

在我MainActivity extends BaseActivity (Activity A)叫在onResume()中,我有一种刷新UI徽章的方法:

public void checkCartItems(){ 
     if(itemCart!=null){ 
      LayerDrawable iconCart = (LayerDrawable) itemCart.getIcon(); 
      int nb_items=mController.getCart().size(); 
      Tools.setBadgeCount(this, iconCart,String.valueOf(nb_items)); 
     } 

    } 

在活动B延伸BaseActivity上的OnClick()我所说的简单的添加:

mController.getCart().addItem(mItem); 

回答

1

使您的ApplicationSingleton。像这样:

public class Controller extends Application { 

    public static final int SIGNUP_REQUEST = 98; // The request code 
    public static final int SIGNIN_REQUEST = 99; 
    private User mUser;// Instance de l'utilisateur connecté 
    private Cart mCart = new Cart(); // Panier 
    private Tracker mTracker; // Analytics 
    private Session mSession; 
    private SessionModule mSessionModule; 
    private static Controller _mInstance; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     _mInstance = this; 

    } 

    @Override 
    protected void attachBaseContext(Context base) { 
     super.attachBaseContext(base); 
     MultiDex.install(this); 
     mSessionModule = new SessionModule(base); 
     mSession = mSessionModule.getSession(); 
    } 

    public static synchronized Controller getInstance() { 
     return _mInstance; 
    } 

    public Cart getCart() { 

     return mCart; 
    } 

    public Session getSession() { 
     return mSession; 
    } 

    public User getUser() { 
     return mUser; 
    } 

    public void setUser(User mUser) { 
     this.mUser = mUser; 
    } 
} 

然后同时使用Application类中,使用Controller.getInstance().getCart().addItem(mItem);

+0

试过,但问题仍然存在:活动A 0项,活动B 1项活动的C 1项(后退键到活动A)0项目 – WhatsUp

+0

有没有在任何地方,你试图从任何'活动'刷新数据?如果是的话,它是否会回到“活动A”? –

+0

没关系! :)我忘了修改其他活动!谢谢你,我今天学习了一件新事物^^ – WhatsUp

0

我会考虑使用静态模式对于这种操作,从而使车对象是一样的贯穿应用程序的整个生命周期。

以下是适用于控制器的解决方案:

步骤1:控制器类中,设置购物车是静态的(修改车的吸气剂是静态以及)

private static Cart mCart; 

步骤2:在控制器的OnCreate初始化实例

@Override 
public void onCreate() { 
    super.onCreate(); 
    mCart = new Cart(); 
} 

使用方法:使用

任何地方得到车
Controller.getCart();