私はからBroadcastReceiver(BroadcastReceiverが内部クラスの場合)からUIを更新する方法を知っています。
これは私が達成しようとしているものです。
(テスト目的のために)私にはLinearLayout(R.id.parent)
の子供がいるアクティビティがあります。TextView(R.id.text)
です。このTextView
をブロードキャスト受信者から更新したいと思います。
私はBroadcastReceiverコンストラクタ内の親ビューを渡しています。onReceive(Context context,Intent i)
の中に私は値(textView,setText("something"))
を設定しています。 しかし、私はNullPointerException
を取得しています。私はそれをデバッグし、コンストラクタで受け取ったViewがnullであることを発見しました。私はここで何が欠けているのですか?BroadcastReceiverからUIを更新する方法
ここでは、コードスニペットである
public class CustomReceiver extends BroadcastReceiver {
View view;
public CustomReceiver (View v) // <-- This v is null in Logs but it is not null in activity
{
this.view = view;
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase("Some String")) {
TextView text= (TextView)view.findViewById(R.id.text);
text.setText("WINTER IS COMING BRUH");
}
}
}
このITここ活性
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.seach_page_layout);
text = (TextView)findViewById(R.id.text);
IntentFilter filter = new IntentFilter();
filter.addAction("Some String");
View parent = (View)findViewById(R.id.parent);
BroadcastReceiver receiver = new CustomReceiver (parent);
registerReceiver(receiver ,filter);
}
0でありますレイアウトが
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>