[英]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.