2017-06-25 3 views
0

私はから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> 

答えて

0

あなたは、あなたのTextViewがそれであるあなたのルートレイアウト膨らませる必要があり、このようなビューを取得することはできません。

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

をして、ビューの結果からあなたのTextViewを見つける:

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

変数 'view'が割り当てられています

public CustomReceiver (View v) 
{ 
    this.view = view; // view -->v 
} 
関連する問題