为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新BroadcastReceiver中的UI

如何更新BroadcastReceiver中的UI

慕莱坞森 2019-09-03 15:57:00
我创建了一个应用程序,我在我的主类(Main Activity)中注册了一个广播接收器,每当我收到BroadcastReceiver我想要更新的UI时,我想要显示一个警告框或设置我的一些文本视图MainActivity。我收到接收器中的所有值但无法设置它们,有人可以帮助我,以便我可以更新我的UI BroadcastReceiver。我的BroadcastReceiver类是MainActivity的内部类,如下所示: -public class MainActivity extends Activity {   ..........public static class NissanTabBroadcast extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            SharedPreferences shrd = context.getSharedPreferences("NissanGallery", context.MODE_WORLD_READABLE);            type = shrd.getString("type", "null");            badges = shrd.getString("badge_count", "null");            //badge_tips_text.setText(badges);            /*Editor edit =  shrd.edit();            edit.remove("type");*/            Toast.makeText(context, "" + type + "\n" + badge_tips_text.getText().toString(), Toast.LENGTH_LONG).show();        }    }}任何帮助都会很明显
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我的情况是更新MainActivity托管的一个片段中的文本字段。我找到的最简单的解决方案是: -


在我的MainActivity类中检索了MainActivtiy的运行实例。这是我的MAinActivity


private static MainActivity mainActivityRunningInstance;

    public static MainActivity  getInstace(){

        return mainActivityRunningInstance;

    }

  @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mainActivityRunningInstance =this;

----------

}

现在在Broadcast reciever的onRecieve方法中,获取该实例并调用update方法


 @Override

    public void onReceive(Context context, Intent intent) {

        if (intent.getAction().matches(Intents.PROVIDER_CHANGED_ACTION)) {

                String textValue="the text field value";

// the null check is for, if the activity is not running or in paused state, in my case the update was required onlyif the main activity is active or paused

            if(MainActivity.getInstace()!=null)

                MainActivity.getInstace().updateUI(textValue);

}

现在,对于我们需要在UIThread中运行更新的部分,MainActivity的updateUI方法将调用片段更新方法。


  public void updateUI(final String str) {

        MainActivity.this.runOnUiThread(new Runnable() {

            public void run() {

     //use findFragmentById for fragments defined in XML ((SimpleFragment)getSupportFragmentManager().findFragmentByTag(fragmentTag)).updateUI(str);

            }

        });

    }

最后一步是更新片段的文本字段


public void updateUI(String str){

        tv_content.setText(str);

    }

和宾果,完成了。我提到这个链接来解决我的问题。希望它能帮到别人。


查看完整回答
反对 回复 2019-09-03
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

用途runOnUiThread:


 MainActivity.this.runOnUiThread(new Runnable() {


        @Override

        public void run() {

            // show alert


        }

    });


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 750 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信