[英]Android: a static TextView in a parent Activity and two child Activity classes that manipulate it
我有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
}
这几乎可以用,除了当我通过单击“ 后退”按钮返回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数据。 并且无论何时您的Home活动都位于前面,即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
现在在
公共类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);
}
}
家长活动
公共类ParentActvity {
...
if(getIntent().getClass().equals(HomeActivity.class))
{
getIntent().getExtras().get("HomeActivity.cartCount");
}
else
{
getIntent().getExtras().get("CartActivity.cartCount");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.