java - 如何刷新打开活动的片段,然后将活动关闭回片段
问题描述
我想在从更改其值的活动返回后立即刷新/重新加载片段。
- 我从我的片段中打开了一个活动
- 在那个活动中,我更新了片段中显示的一些 SQL
- 然后我回到片段,使用
finish();
它把我送回片段
我曾尝试使用onResume()
with adapter.notifyDataSetChanged()
,但这会使应用程序因以下错误而崩溃:
Attempt to invoke virtual method 'void com.example.tomaspap.ItemMySerieRecyclerView.MyAdapterItemMySerie.notifyDataSetChanged()' on a null object reference
片段代码:
公共类 SeriesFragment 扩展 Fragment {
private static final String TAG = "MySeriesFragment";
private final String URLBASIS = "https://api.themoviedb.org/3/tv/";
private final String URLAPIKEY = "?api_key=4946fe5b625b70f37a13e1fe882451a4";
private final String imagebaseurl = "http://image.tmdb.org/t/p/w500";
RecyclerView mRecyclerView;
MyAdapterItemMySerie mAdapter;
String serieid;
String watchstate;
private ArrayList<MySerieModel> models;
private RequestQueue mRequestQueue;
private JsonObjectRequest request;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_series, container, false);
models = new ArrayList<>();
mRecyclerView = v.findViewById(R.id.series_recyclerView);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mAdapter = new MyAdapterItemMySerie(getContext(), models);
//mRecyclerView.setAdapter(mAdapter);
return v;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DBHelper db = new DBHelper(getContext());
Cursor cursor = db.Select_All_Serie();
models = new ArrayList<>();
cursor.moveToFirst();
if(cursor.getCount()==0){
Toast.makeText(getContext(), "NO SERIES", Toast.LENGTH_SHORT).show();
}
if(cursor.getCount() > 0){
do {
serieid = cursor.getString(cursor.getColumnIndex("serieid")).toString();
watchstate = cursor.getString(cursor.getColumnIndex("watchstate")).toString();
Integer yourrate = cursor.getInt(cursor.getColumnIndex("yourrate"));
Integer watchedeps = cursor.getInt(cursor.getColumnIndex("watchedeps"));
mRequestQueue = Volley.newRequestQueue(getContext());
parseJSON(serieid, watchstate);
models.add(new MySerieModel(serieid, watchstate, yourrate, watchedeps));
} while (cursor.moveToNext());
}
// Toast.makeText(getContext(), String.valueOf(models.size()), Toast.LENGTH_SHORT).show();
}
private void parseJSON(final String serieid, final String watchstate){
String url = URLBASIS + serieid + URLAPIKEY;
request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String title = (response.getString("name"));
String nextepfinal = "";
try {
JSONObject jsonArraynextep = (response.getJSONObject("next_episode_to_air"));
nextepfinal = jsonArraynextep.getString("air_date");
}catch(JSONException e){}
String state = (response.getString("status"));
// String serieid = (response.getString("id"));
String imageurl = (response.getString("poster_path"));
String image = imagebaseurl + imageurl;
MySerieModel serie = new MySerieModel(title, nextepfinal, state, watchstate, serieid, image);
models.add(serie);
} catch (JSONException e) {
e.printStackTrace();
return;
}
mAdapter = new MyAdapterItemMySerie(getContext(), models);
mRecyclerView.setAdapter(mAdapter);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
mRequestQueue.add(request);
}
@Override
public void onResume()
{
super.onResume();
models.clear();
mAdapter.notifyDataSetChanged();
}
感谢您的帮助。
解决方案
你的列表加载方法是分散的,我确信这就是为什么他们关心让你感到困惑我建议你创建一个方法,例如。updateUI()
并将它们全部放在一个地方,然后您可以在想要更新UI
类似onCreate()
和onResume()
方法时调用它另外,它也是处理单例中列出项目的好习惯,这样您就可以在应用程序的任何位置访问它们
模型列表片段.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
updateUI()
}
@Override
public void onResume() {
super.onResume();
updateUI();
}
public void updateUI() {
ModelSingleton modelSingleton = Model.get(getActivity());
List<Model> models= modelSingleton.getModels();
if (mAdapter == null) {
mAdapter = new MyAdapterItemMySerie(getContext(), models);
mRecyclerView.setAdapter(mAdapter);
} else {
mAdapter.setModels(models);
mAdapter.notifyDataSetChanged();
}
updateSubtitle();
}
....
推荐阅读
- nodatime - 分区日期时间和即时之间的 Noda 时间比较
- php - 数据未通过 PHP 表单保存在数据库中
- html - 使用浮动元素时自动边距
- javascript - ReactNative FlatList 并不总是显示所有项目并且不可滚动。它将行限制为 initialNumToRender,但没有滚动来渲染更多
- c# - 如何使用 Aspose.Word C# 在 MS Word 中插入图标
- ios - iOS capturePhoto() 仅在 iPad 11" 第三代前置摄像头上无法拍摄最高分辨率的照片
- flutter - _MapStream
>, 列表 >' 不是 'Map 类型的子类型 > - scrapy - Scrapy抓取不抓取任何网址
- python - 如何将 MMAP 文件转换为另一种文件类型?
- swift - 在 10 次迭代时早期收敛 CreateML