首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么LocalBroadcastManager不能工作?

为什么LocalBroadcastManager不能工作?
EN

Stack Overflow用户
提问于 2015-07-09 09:06:23
回答 2查看 2.1K关注 0票数 1

我试着学习LocalBroadcastManager。在网上搜索并实现了一个简单的应用程序,它有两个活动来执行LocalBroadcastManager。但这不管用。我找不到我的代码出了什么问题。请帮帮我!

这是我的密码。

FirstActivity.java

代码语言:javascript
复制
public class FirstActivity extends Activity {

private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_first);

    button = (Button) findViewById(R.id.button);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(FirstActivity.this, SecondActivity.class));
            Intent intent = new Intent("localReceiver");
            LocalBroadcastManager.getInstance(FirstActivity.this).sendBroadcast(intent);
        }
    });
}    }

SecondActivity.java

代码语言:javascript
复制
public class SecondActivity extends Activity {

private TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    textView = (TextView) findViewById(R.id.hi_text);
    LocalBroadcastManager.getInstance(this).registerReceiver(message, new IntentFilter("localReceiver"));
}

@Override
protected void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(message);
}

private BroadcastReceiver message = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("SecondActivity", "Receiver Initiated...");
        textView.setText("Intent receiver activated");
    }
};   }

AndroidManifest.xml

代码语言:javascript
复制
    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".FirstActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".SecondActivity"
        android:windowSoftInputMode="adjustResize|stateHidden"
        android:label="SecondActivity" />

</application>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-09 09:33:04

您正在从FirstActivity广播一些东西,并且您期望SecondActivity收到它。为了实现这一点,您应该能够同时运行两个不同的Activity,这在设计上是不可能的。当你广播这个字符串的时候,你已经没有人在听了。尝试使用Service广播String,并恢复接收Activity,它将工作。

票数 2
EN

Stack Overflow用户

发布于 2015-07-09 10:09:15

SecondActivity应该是这样的:

代码语言:javascript
复制
private BroadcastReceiver uiUpdateReceiver; 

onStart()

代码语言:javascript
复制
@Override
protected void onStart() {
    LocalBroadcastManager.getInstance(SecondActivity.this).registerReceiver((uiUpdateReceiver), new IntentFilter("Your_Data");
    super.onStart();
}

onCreate()

代码语言:javascript
复制
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    uiUpdateReceiver = new BroadcastReceiver() {
           @Override
           public void onReceive(Context context, Intent intent) {

           }
     };
}

onStop()

代码语言:javascript
复制
@Override
protected void onStop() {
    LocalBroadcastManager.getInstance(ChatActivity.this).unregisterReceiver(uiUpdateReceiver);
    super.onStop();
}

希望它能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31312920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档