[英]How can I use RecyclerView in fragments using Firestore - Android
[英]How can I use getSupportLoaderManager() in Fragments?
我想将API中的信息加载到Fragment
。
我使用getSupportLoaderManager()
但发生错误:
无法解析方法:getSupportLoaderManager()
我在onActivityCreated()
搜索这个用法,但我有NullPointerException
。
你能帮我解决一下这个问题吗?
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
public class Business extends Fragment implements LoaderManager.LoaderCallbacks<String> {
ListView listView;
public Business() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_business, container, false);
listView = view.findViewById(R.id.list_item);
getSupportLoaderManager().initLoader(0, null, getContext()).forceLoad();
return view;
}
@Override
public Loader<String> onCreateLoader(int id, Bundle args) {
return null;
}
@Override
public void onLoadFinished(Loader<String> loader, String data) {
if (data != null && !data.isEmpty())
updateUI(data);
else
Toast.makeText(getContext(), "no internet", Toast.LENGTH_SHORT).show();
}
@Override
public void onLoaderReset(Loader<String> loader) {
}
private void updateUI(String data) {
try {
final ArrayList<ResultOfArtBusiness> results = new ArrayList<>();
JSONObject root = new JSONObject(data);
JSONObject secondObject = root.getJSONObject("response");
JSONArray firstArray = secondObject.getJSONArray("results");
for (int i = 0; i < firstArray.length(); i++) {
JSONObject objectInArray = firstArray.getJSONObject(i);
String webPublicationDate;
if (objectInArray.has("webPublicationDate"))
webPublicationDate = objectInArray.getString("webPublicationDate");
else webPublicationDate = null;
String webTitle;
if (objectInArray.has("webTitle"))
webTitle = objectInArray.getString("webTitle");
else webTitle = null;
String webUrl;
if (objectInArray.has("webUrl"))
webUrl = objectInArray.getString("webUrl");
else webUrl = null;
ResultOfArtBusiness resultOfArticle = new ResultOfArtBusiness(webTitle, webPublicationDate, webUrl);
results.add(resultOfArticle);
}
NewsAdapterBusiness adapter = new NewsAdapterBusiness(getContext(), R.layout.item_design, results);
listView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
更新: 2019年9月2日
不推荐使用Fragment
getLoaderManager()
。
使用
// LoaderManager#getInstance(LifecycleOwner)
LoaderManager.getInstance(this) // this points to the Fragment
老答案
问题是我们在从活动调用时使用getLoaderManager()
或getSupportLoaderManager()
但是当涉及到片段时你可以直接调用getLoaderManager()
而不需要调用getSupportLoaderManager()
并在幕后调用它各自的方法版本取决于使用的片段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.