broadcastreceiver某些代码不起作用

时间:2017-06-19 20:19:36

标签: android

我向应用程序发送数据时遇到问题我只接收消息但我想更改按钮形状等等但它不起作用

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);

为什么?

3 个答案:

答案 0 :(得分:1)

您永远不会显示您的充气布局。所以你要将布局膨胀到RAM中,然后设置文本框的文本,但是你永远不会在任何地方显示它。这就是你无法看到的原因。

此外,直接在BroadcastReceiver中夸大布局是不好的做法。如果您想要显示视图,请从onReceive开始一项活动。

答案 1 :(得分:0)

以这种方式你无法显示你的视图, 你应该开始你的活动并将你的文本作为额外的内容发送给它:

你有意在onReceive所以:

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

并在您的MainActivity中(我假设它是您的布局名称中的MainActivity)获取您的Extra并将其设置为:

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

答案 2 :(得分:0)

您可以拥有活动或片段,而不是在Reciever中对布局进行充气,为该活动或片段使用该布局。

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

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