2017-06-19 69 views
0

我有一个问题,当我将数据发送到应用程序,我只收到消息,但我要像等改变按键的形状,但它不工作广播接收器的一些代码将不会工作

package com.pioneer.it.gcmpro; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 


public class PushReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     String title="P"; 
     String text="T"; 

     if(intent.getStringExtra("message")!=null) 
      text=intent.getStringExtra("message"); 

     Intent i=new Intent(context,MainActivity.class); 
     PendingIntent pi=PendingIntent.getActivity 
       (context,0,i,PendingIntent.FLAG_UPDATE_CURRENT); 



     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflater.inflate(R.layout.activity_main,null); 
     Button b = (Button) v.findViewById(R.id.button); 

     b.setText("" + text); 
     Toast.makeText(context, "" + text, Toast.LENGTH_SHORT).show(); 



    } 
} 

这条线仅适用于Toast.makeText(上下文,“”+ text,Toast.LENGTH_SHORT).show();

但这行不行b.setText(“”+ text);

为什么?

回答

1

你永远不会显示你膨胀的布局。所以你正在将一个布局扩展到RAM中,然后为文本框设置文本,但是你永远不会在任何地方显示它。这就是为什么你看不到它。

此外,在BroadcastReceiver中直接膨胀布局是不好的做法。如果你想显示一个视图,请从你的onReceive开始一个活动。

这样你不能显示你的看法, 你应该开始你的活动并发送文本作为额外给它这样
+0

我不明白你有问题的解决方案 –

+0

请参阅@ meikiem的回答 – Aenadon

0

你有意向在的onReceive这样:

intent.putExtra(text, your_key); 
context.startActivity(intent); 

和在您的MainActivity(我认为这是MainActivity从布局名称)让你的额外并将其设置是这样的:

Button yourButton = (Button) v.findViewById(R.id.button); 
yourButton.setText(getIntent().getStringExtra("your_key")); 
+0

但应用程序踢我 –

+0

解释更多。如果有错误,告诉我, – Meikiem

+0

告诉我有错误是在这里context.startActivity(in); –

0

相反inflat的在Reciever中的布局中,您可以拥有活动或片段,为该活动或片段使用该布局。

并在Activity/Fragment中初始化并创建该按钮作为公共静态。

当您收到消息(onRecieve方法调用)时,您可以从这里访问该按钮(因为它是公共静态的),您可以更新该按钮的UI。