簡體   English   中英

可以在onCreate()方法之外設置Android TextView的文本嗎?

[英]Can the text of an Android TextView be set outside of the onCreate() method?

我正在嘗試使用以下功能在Android應用程序中設置TextView的文本:

@Override
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (!stateChanges.getFrom().getSubscribed() && stateChanges.getTo().getSubscribed()) {
        new AlertDialog.Builder(this)
                .setMessage("You have successfully subscribed to push notifications!")
                .show();
        // Get player ID and output to Main Activity
        TextView playerIdView = findViewById(R.id.playerIdView);
        playerIdView.setText(stateChanges.getTo().getUserId());
    }

    Log.i("Debug", "onOSPermissionsChanged: " + stateChanges);
}

這使用OneSignal API來獲取用戶的唯一ID,該ID作為字符串返回。 經過一些調試后,我意識到不能在onCreate()方法之外更改TextView的內容。 但是,需要stateChanges參數,該參數僅存在於onOSSubscriptionChanged 有什么辦法可以解決這個問題?

編輯:錯誤是在其他地方。 stateChanges.getTo().getUserId()返回null

您需要在UI線程上進行設置

playerIdView.post(new Runnable() {
    public void run() {
       playerIdView.setText(stateChanges.getTo().getUserId());
    } 
});

要么

Handler mainHandler = new Handler(Looper.getMainLooper());

Runnable myRunnable = new Runnable() {
    @Override 
    public void run() {
       playerIdView.setText(stateChanges.getTo().getUserId());} 
    };
mainHandler.post(myRunnable);

您需要在onCreateView()方法中初始化textview ,此后,只要您在UI線程中,就textView幾乎任何地方使用該textView 因此,將您的代碼更改為以下內容:

全局聲明您的textview ,以便您可以在活動實例的任何地方使用它。

TextView playerIdView;

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

  playerIdView = findViewById(R.id.playerIdView);   

}

然后在您的onSSubscription方法中執行以下操作:

 @Override
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (!stateChanges.getFrom().getSubscribed() && stateChanges.getTo().getSubscribed()) {
        new AlertDialog.Builder(this)
                .setMessage("You have successfully subscribed to push notifications!")
                .show();
        // Get player ID and output to Main Activity
        playerIdView.setText(stateChanges.getTo().getUserId());
    }

    Log.i("Debug", "onOSPermissionsChanged: " + stateChanges);
}

嘗試這個

    runOnUiThread(new Runnable(){
        @override
        public void run() {
            playerIdView.setText(stateChanges.getTo().getUserId());
        }
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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