Android:一个父Activity中的静态TextView和两个操作它的子Activity类



我有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");
        }

}

最新更新