gpt4 book ai didi

android - 非 Activity 类中的 findViewById

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:52 25 4
gpt4 key购买 nike

我对此还是比较陌生,但在我的 Activity 类 MainActivity 中使用的非 Activity 类 MyLocation 中查找 View 时遇到了问题。我正在使用 MyLocation 获取经度和纬度。我想在使用 GPS 或网络时突出显示 TextView 。为此,我需要在非 Activity 类 MyLocation 中找到 TextView 。

这是我在 MainActivity 中调用它的方式:

public class MainActivity extends ActionBarActivity implements LocationListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

MyLocation myLocation = new MyLocation();
myLocation.getLocation(this, locationResult);

}

这里是我在 MyLocation 中尝试查找 TextView 的方法:

public class MyLocation {

LocationManager lm;
LocationResult locationResult;
private Context context;
TextView tvnetwork, tvgps;
private int defaultTextColor;

LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {

locationResult.gotLocation(location);

LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.main, null);

tvnetwork = (TextView) v.findViewById(R.id.tvnetwork);
tvgps = (TextView) v.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();

tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);

lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
}

public void onProviderDisabled(String provider) {
}

public void onProviderEnabled(String provider) {
}

public void onStatusChanged(String provider, int status, Bundle extras) {
}
};

但是没有找到 View 。我已经得到一个 NPE @ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);。我做错了什么?

最佳答案

get a NPE @ .getSystemService(Context.LAYOUT_INFLATER_SERVICE);. What am I doing wrong?

因为 contextMyLocation 类中是 null。使用 MyLocation 类构造函数传递 MyLocation 中的 MainActivity 上下文来访问系统服务:

Activity activity;
public MyLocation(Context context,Activity activity){
this.context=context;
this.activity=activity;
}

并在 MainActivity 中通过传递 MainActivity 上下文创建 MyLocation 类对象:

MyLocation myLocation = new MyLocation(MainActivity.this,this);

现在使用context访问MyLocation类中的系统服务

编辑:不要在 onLocationChanged 中再次膨胀主布局,而是使用 Activity 上下文从 Activity Layout 访问 View :

 public void onLocationChanged(Location location) {

....
tvnetwork = (TextView) activity.findViewById(R.id.tvnetwork);
tvgps = (TextView) activity.findViewById(R.id.tvgps);
defaultTextColor = tvgps.getTextColors().getDefaultColor();

tvnetwork.setTextColor(context.getResources().getColor(
R.color.green));
tvgps.setTextColor(defaultTextColor);

....
}

关于android - 非 Activity 类中的 findViewById,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com