2017-06-25 3 views
0

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> 

Antwort

0

Sie können Ansicht wie diese erhalten, sollten Sie Ihr Root-Layout aufblasen, dass Ihr Textview drin ist:

View view = View.inflate(context, R.layout.YOUR_ROOT_LAYOUT, null); 

und dann Textview aus der Sicht Ergebnis finden:

TextView text = (TextView)view.findViewById(R.id.text); 
text.setText("WINTER IS COMING BRUH"); 
0

Variable 'view' ist sich selbst zugewiesen

public CustomReceiver (View v) 
{ 
    this.view = view; // view -->v 
} 
Verwandte Themen