我有3个活动类,一个父类和两个子类。父类有一个静态TextView,我希望子类能够利用它。
我的想法是,我将使用这个TextView作为购物车计数器,因为它是静态的,所以每当用户在活动之间切换时,我不必担心刷新子类,因为只有一个TextView实例可以引用。
一些伪代码来帮助说明:
public class ParentActivity extends AppCompatActivity {
protected static TextView cartCount;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
...
cartCount = (TextView) actionLayout.findViewById(R.id.cart_count);
cartCount.setText(cartObject.getTotalAmountOfItems());
...
}
}
public class HomeActivity extends ParentActivity {
...
onItemClick
cartCount.setText("1") // user adds one item to the cart
}
public class CartActivity extends ParentActivity { // lists items currently in shopping cart
...
onItemClick
cartCount.setText("2") // user realizes they want two of the selected item
}
这几乎是有效的,只是当我通过单击back按钮返回HomeActivity(launchMode=singleTop)时,计数器是导航到CartActivity之前的计数器,即使在尝试添加或删除购物车中的项目时,计数器也会保持这种状态。仍然需要刷新HomeActivity,以便重新开始反映正确的项目数量,这可以通过旋转屏幕来完成。
这几乎就像静态的TextView专注于CartActivity,所以我在HomeActivity中看到的TextView不再是我在ParentActivity中声明的TextView的真实表示。有人能详细说明在这种情况下幕后发生了什么吗?
静态视图不是一个好主意。在极少数情况下,如果不小心使用,它们可能会导致内存泄漏和崩溃。您的案例听起来不像我使用静态TextView的案例之一。相反,最好使用某种共享偏好来保存活动中常见的数据。
查看有关如何执行此操作的更多信息:http://developer.android.com/training/basics/data-storage/shared-preferences.html
我还建议不要使用静态视图,根本不要使用解决方案。对于你的问题,我建议两种解决方案:1.应用程序类:如果你知道如何实现它,那么只需在应用程序类中创建一个变量来保存Cart数据。无论何时,只要您的家庭活动处于领先地位,即onStart方法(请检查您的商务箱)2.SharedPreference:您可以创建共享首选项并将购物车数据保存在此中,然后在主活动的onStart中再次清除该首选项。
对购物车计数背后的推理感到困惑,你想在购物车计数上加1吗?
当您返回主页时,可能会通过捆绑包传递setText的值,以便存储该值。当您在活动之间导航时,您正在使用startActivity,对吗?
public class HomeActivity
{
public final String EXTRA_cartCount = "HomeActivity.cartCount"
...
@Override
public void onBackPressed()
{
Intent i = new Intent(this,ParentActvity.class);
i.putExtra(EXTRA_cartCount,cartCount);
startActivity(i);
}
}
Also in cardActivity
现在在
公共类卡片活动{
public final String EXTRA_cartCount = "CardActivity.cartCount"
...
@Override
public void onBackPressed()
{
Intent i = new Intent(this,ParentActvity.class);
i.putExtra(EXTRA_cartCount,cartCount);
startActivity(i);
}
}
ParentActivity
公共类ParentActivity{
...
if(getIntent().getClass().equals(HomeActivity.class))
{
getIntent().getExtras().get("HomeActivity.cartCount");
}
else
{
getIntent().getExtras().get("CartActivity.cartCount");
}
}