我想从更改其值的活动中恢复后立即刷新/重新加载片段。
finish();
返回到片段,这使我回到了片段我尝试将onResume()
与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();
}
谢谢您的帮助。
答案 0 :(得分:0)
您的列表加载方法比较分散,请确定其为何会令您感到困惑
我建议您创建一个方法,例如updateUI()
并将它们全部放在一个位置,然后在您想更新UI
像onCreate()
和{{1 }} 方法
同样好的做法是处理您单例列出的项目,以便您可以在应用程序中的任何位置访问它们
onResume()