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);
否则您将创建对象、设置内容,然后替换它
此代码
...
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);
否则您将创建对象、设置内容,然后替换它