setText 在服务中引用 xml 的 ViewGroup 的 TextView 中不起作用

setText does not work in the TextView of the ViewGroup that references xml in the service

此代码

...

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); }
    };

我在我的代码中创建了一个视图,没有引用之前创建的布局,它在我 setText 时起作用了。但是,setText 在您引用布局后无法正常工作。奇怪的是,Log中的getText().toString()被正确写入了Log。我不知道哪里错了。 我做错了什么吗? 有什么遗漏吗? 请告诉我。谢谢你。

下一行:

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

正在创建一个新布局,但作为第二个参数传递的 null 意味着视图未附加到视图层次结构,这意味着对它的引用基本上没有价值。

假设您在 activity 中,则在调用 setContentView 后无需手动扩充布局。如果您确实需要保持充气,请更改为以下内容:

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

传递 null 会导致 inflate 例程错过一些重要步骤,因此即使您不想立即附加视图(即适配器)也应避免。第三个(可选)参数决定是否立即将视图添加到层​​次结构中。

至少

linearLayoutPopup = new LinearLayout(this);

应替换为

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

否则您将创建对象、设置内容,然后替换它