簡體   English   中英

Android:父Activity和兩個子Activity類中的一個靜態TextView

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM