Ich weiß, wie UI von BroadcastReceiver aktualisieren (Wenn BroadcaseReceiver eine innere Klasse ist).
Also hier ist was ich versuche zu erreichen.
(Für Testzweck) Ich habe eine Aktivität, die eine LinearLayout(R.id.parent)
hat, die ein Kind TextView(R.id.text)
hat. Ich möchte diese TextView
von Broadcast Empfänger aktualisieren.
Dafür übergebe ich übergeordnete Ansicht in BroadcastReceiver Konstruktor. Und innerhalb onReceive(Context context,Intent i)
ich bin Wert (textView,setText("something"))
setzen. Aber ich bekomme NullPointerException
. Ich habe es debuggt und festgestellt, dass View im Konstruktor null ist. Was ich hier vermisse? HierWie UI von BroadcastReceiver aktualisieren
ist das Code-Snippet
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");
}
}
}
Dieses es die Aktivität
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);
}
Hier wird das Layout
<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>