В ViewPager Fragment загрузчик курсора работает только один раз, в то время как в действии он отображает данные как изменения данных в базе данных.
Существует также много ответов на StackOverflow, предполагающих, что это может быть проблемой библиотеки поддержки, но я импортировал библиотеки v4 для всех.
Мой код фрагмента, как показано ниже
public class Scenes extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
private static final int SCENE_LOADER = 0;
ListView listView;
FloatingActionButton fabScenes;
private SceneAdapter mAdapter;
EditText sceneNameText, hours, minutes;
String sceneText;
int hrs, minuts, duration=0;
public Scenes() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getSupportLoaderManager().initLoader(SCENE_LOADER, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_scenes, container, false);
fabScenes = view.findViewById(R.id.fabScene);
listView = view.findViewById(R.id.listScenes);
mAdapter = new SceneAdapter(getActivity(), null);
listView.setAdapter(mAdapter);
fabScenes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
insertScene();
}
});
return view;
}
/**
* Helper method to insert hardcoded pet data into the database. For debugging purposes only.
*/
private void insertScene() {
ContentValues values = new ContentValues();
values.put(ProgramContract.SceneEntry.COLUMN_NAME, "Kitchen");
values.put(ProgramContract.SceneEntry.COLUMN_DURATION, "40");
Uri newUri = getActivity().getContentResolver().insert(ProgramContract.SceneEntry.CONTENT_URI, values);
}
@NonNull
@Override
public Loader<Cursor> onCreateLoader(int id, @Nullable Bundle args) {
String[] projection = {
ProgramContract.SceneEntry._ID,
ProgramContract.SceneEntry.COLUMN_NAME,
ProgramContract.SceneEntry.COLUMN_DURATION};
// This loader will execute the ContentProvider's query method on a background thread
return new CursorLoader(getActivity(), // Parent activity context
ProgramContract.SceneEntry.CONTENT_URI, // Provider content URI to query
projection, // Columns to include in the resulting Cursor
null, // No selection clause
null, // No selection arguments
null);
} // Default sort order}
@Override
public void onLoadFinished(@NonNull Loader<Cursor> loader, Cursor data) {
mAdapter.swapCursor(data);
}
@Override
public void onLoaderReset(@NonNull Loader<Cursor> loader) {
mAdapter.swapCursor(null);
}
}