2016-01-06 48 views
1

我有3個Activity類,一個父級和兩個子級。父類有一個靜態的TextView,我希望子類能夠使用它。Android:父級Activity中的靜態TextView和操作它的兩個子Activity類

我的想法是我將這個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的真實表示。任何人都可以詳細說明在這種情況下幕後發生了什麼?

回答

1

我也建議不要使用靜態視圖,而不是在所有的解決方案。 我會爲你的問題提出兩個解決方案: 1.應用程序類:如果你知道如何實現它,那麼只需在應用程序類中創建一個變量來保存購物車數據。並且,只要您的家庭活動就在前面,即onStart方法(請檢查您的商業活動) 2. SharedPreference:您可以創建共享偏好並將購物車數據保存在此主動活動的onStart中,並再次保存,您可以清除首選項。

4

靜態視圖不是一個好主意。如果在使用它們的極少數情況下,它們可能會導致內存泄漏和崩潰,如果不小心使用它們。你的情況聽起來不像我會使用靜態TextView的情況之一。相反,使用某種共享偏好來保存在您的活動中很常見的數據可能會更好。

請參閱有關如何做到這一點的詳細信息:http://developer.android.com/training/basics/data-storage/shared-preferences.html

0

對推車數量背後的推理感到困惑,你想在推車數量上加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); 

    } 

} 

ParentActivity

公共類ParentActvity {

... 

if(getIntent().getClass().equals(HomeActivity.class)) 
     { 
      getIntent().getExtras().get("HomeActivity.cartCount"); 
     } 
     else 
     { 
      getIntent().getExtras().get("CartActivity.cartCount"); 
     } 



}