gpt4 book ai didi

java - 在 onCreateView 之外使用 findViewById 返回 null

转载 作者:行者123 更新时间:2023-12-01 18:59:21 24 4
gpt4 key购买 nike

我尝试了几种不同的方法,但似乎不起作用。如果我在 onCreateView 之外使用 getActivity()getView() 执行 findViewById,它会返回 null,并且我的应用程序崩溃。

这是一个代码 fragment :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

View RootView = inflater.inflate(R.layout.fragment_weather, container, false);

addressTxt = RootView.findViewById(R.id.address);
updated_atTxt = RootView.findViewById(R.id.updated_at);
statusTxt = RootView.findViewById(R.id.status);
tempTxt = RootView.findViewById(R.id.temp);
temp_minTxt = RootView.findViewById(R.id.temp_min);
temp_maxTxt = RootView.findViewById(R.id.temp_max);
sunriseTxt = RootView.findViewById(R.id.sunrise);
sunsetTxt = RootView.findViewById(R.id.sunset);
windTxt = RootView.findViewById(R.id.wind);
pressureTxt = RootView.findViewById(R.id.pressure);
humidityTxt = RootView.findViewById(R.id.humidity);

new weatherTask().execute();

return RootView;
}

class weatherTask extends AsyncTask<String, Void, String> {

@Override
protected void onPreExecute() {
super.onPreExecute();

getView().findViewById(R.id.loader).setVisibility(View.VISIBLE);
getView().findViewById(R.id.mainContainer).setVisibility(View.GONE);
getView().findViewById(R.id.errorText).setVisibility(View.GONE);

}
}

在这里您可以看到onCreateView下面的方法中的 View 正在使用getView(),但这不起作用。我该如何才能像这样在 onCreate 之外使用 findViewById

最佳答案

试试这个;

TextView addressTxt, updated_atTxt, statusTxt, tempTxt, temp_minTxt,
temp_maxTxt, sunriseTxt, sunsetTxt, windTxt, pressureTxt, humidityTxt;

//Create your views you used in AsyncTask here
//View YourView, YourContainer, ErrorText


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View RootView = inflater.inflate(R.layout.fragment_weather, container, false);
return RootView;
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
defineViews(view);
}

private void defineViews(View view){
addressTxt = view.findViewById(R.id.address);
updated_atTxt = view.findViewById(R.id.updated_at);
statusTxt = view.findViewById(R.id.status);
tempTxt = view.findViewById(R.id.temp);
temp_minTxt = view.findViewById(R.id.temp_min);
temp_maxTxt = view.findViewById(R.id.temp_max);
sunriseTxt = view.findViewById(R.id.sunrise);
sunsetTxt = view.findViewById(R.id.sunset);
windTxt = view.findViewById(R.id.wind);
pressureTxt = view.findViewById(R.id.pressure);
humidityTxt = view.findViewById(R.id.humidity);

/*Define your views here
YourView = view.findViewById(R.id.loader);
YourContainer = ...
ErrorText = ...
...
*/
}

class weatherTask extends AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();

//YourView.setVisibility(View.VISIBLE);
//YourContainer.setVisibility(View.GONE);
//ErrorText.setVisibility(View.GONE);
}

@Override
protected String doInBackground(String... strings) {
return null;
}
}

希望这能起作用。

关于java - 在 onCreateView 之外使用 findViewById 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651069/

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