2017-02-28 12 views
0

私は以前に作成したレイアウトを参照せずに私のコードでビューを作成し、このコードのsetTextサービス

... 

private LayoutInflater layoutInflater; 
private ViewGroup rootView; 
int wrap_content = WindowManager.LayoutParams.WRAP_CONTENT; 

... 
     linearLayoutPopup = new LinearLayout(this); 
     linearLayoutPopup.setBackgroundColor(getResources().getColor(R.color.colorExResult));  
     linearLayoutPopup.setOrientation(LinearLayout.HORIZONTAL); 

     layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 


     mParams = new WindowManager.LayoutParams(
       wrap_content, 
       wrap_content, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 
     mParams.gravity = Gravity.LEFT | Gravity.TOP; 
     mParams.y = 100; 

     rootView = (ViewGroup) layoutInflater.inflate(R.layout.service_bike_value, null); 
     linearLayoutPopup = (LinearLayout) layoutInflater.inflate(R.layout.service_bike_value, null); 

    if(rootView != null) { 
     textView_speed_service = (TextView) rootView.findViewById(R.id.textView_Speed_service); 

    } 

     timerHandler.sendEmptyMessage(0); 
... 

public Handler timerHandler = new Handler(){ 

    public void handleMessage(Message msg) 
    { 
     textViewspeed.setText(""+speed); 

     Log.d("textViewSpeed", textViewspeed.getText().toString()); 
     timerHandler.sendEmptyMessageDelayed(0, 200); } 
    }; 

でXMLを参照するのViewGroupのTextViewのでは動作しません、それはときに私setTextを働きました。ただし、setTextは、レイアウトを参照した後、正常に動作しません。不思議なことに、ログのgetText().toString()が適切にログに書き込まれます。私はそれが間違っているか分からない。 私は間違ったことはありますか? などが見つかりませんでしたか? 教えてください。ありがとうございました。

+0

それを交換する

linearLayoutPopup = (LinearLayout) layoutInflater.inflate(R.layout.service_bike_value, rootView, true); 

に置き換える必要があります。 viewgroup.findViewById(R.id.textviewID); –

+0

申し訳ありません 私は誤ってコードを紛失しました。 元のソースに含まれています。 訂正されました。 –

+0

質問を繰り返さないでください。あなたが持っている新しい情報、元にした新しいコード、投稿された回答がうまくいかない理由の説明など、オリジナルの投稿を編集するだけで、それをアクティブなキューの一番上に表示します。 –

答えて

1

次の行:

layoutInflater.inflate(R.layout.service_bike_value, null); 

新しいレイアウトが、2番目のパラメータとして渡されたヌルを作成しているビューは、基本的価値であることを基準手段ビュー階層に取り付けられていないことを意味します。

あなたがアクティビティにいると仮定すると、setContentViewが呼び出された後に手動でレイアウトを膨張させる必要はありません。あなたはすぐにビューを添付したくない場合でも、インフレートルーチンは避けるべきであるので、いくつかの重要なステップを欠場する原因nullを渡すことにより

layoutInflater.inflate(R.layout.service_bike_value, rootView, true); 

:あなたがインフレートを維持する必要がある場合は、次のように変更(すなわちアダプタ)。 3番目の(オプションの)パラメータは、ビューをすぐに階層に追加するかどうかを決定します。最小

linearLayoutPopup = new LinearLayout(this); 

として

は、そうでない場合は、あなたが、オブジェクトを作成し、物事を設定し、ビューを宣言する必要があり

+0

あなたのアドバイスはとても役に立ちました。 ありがとうございます。頑張って。 –

+0

私は幸運よりも私の答えを受け入れるだろう;) –