The problem with the fragment in which there is a ListView , and it displays data from the database.
In MainActivity complains about the third line from the code below:
private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter vpadapter = new ViewPagerAdapter(getSupportFragmentManager()); vpadapter.addFrag(new fmonday(), "Понедельник"); vpadapter.addFrag(new ftuesday(), "Вторник"); vpadapter.addFrag(new fwednesday(), "Среда"); vpadapter.addFrag(new fthursday(), "Четверг"); vpadapter.addFrag(new ffriday(), "Пятница"); vpadapter.addFrag(new fsaturday(), "Суббота"); viewPager.setAdapter(vpadapter); } The fragment is declared as follows:
public class fmonday extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> { Logcat:
Error: (98, 27) error: incompatible types: fmonday cannot be converted to Fragment
Google advised me to change in the declaration of the class "fmonday" extends FragmentActivity on extends Fragment , but after that I get several other errors, one with the Loader of the fragment, the second is incomprehensible:
error: cannot find symbol method getSupportLoaderManager ()
error: onDestroy () in fmonday cannot override onDestroy () in Fragment; trying to assign weaker access privileges; was public.
Full MainActivity code:
public class MainActivity extends AppCompatActivity { private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter vpadapter = new ViewPagerAdapter(getSupportFragmentManager()); vpadapter.addFrag(new fmonday(), "Понедельник"); vpadapter.addFrag(new ftuesday(), "Вторник"); vpadapter.addFrag(new fwednesday(), "Среда"); vpadapter.addFrag(new fthursday(), "Четверг"); vpadapter.addFrag(new ffriday(), "Пятница"); vpadapter.addFrag(new fsaturday(), "Суббота"); viewPager.setAdapter(vpadapter); } class ViewPagerAdapter extends FragmentPagerAdapter { private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFrag(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } } Full fmonday code:
public class fmonday extends FragmentActivity implements LoaderManager.LoaderCallbacks<Cursor> { private static final int CM_DELETE_ID = 1; ListView lvData1; DB db; SimpleCursorAdapter scAdapter; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fmonday); // открываем подключение к БД db = new DB(this); db.open(); // формируем столбцы сопоставления String[] from = new String[] { //DB.COLUMN_IMG, DB.COLUMN_TXT, DB.COLUMN_PREP, DB.COLUMN_AUD1,//DB.COLUMN_AUD }; int[] to = new int[] { //R.id.ivImg, R.id.tvTextPredmet, R.id.tvTextPrepod, R.id.tvTextAud, //R.id.tvTextAud }; // создааем адаптер и настраиваем список scAdapter = new SimpleCursorAdapter(this, R.layout.item, null, from, to, 0); lvData1 = (ListView) findViewById(R.id.lvData); lvData1.setAdapter(scAdapter); // добавляем контекстное меню к списку registerForContextMenu(lvData1); // создаем лоадер для чтения данных getSupportLoaderManager().initLoader(0, null, this); } // обработка нажатия кнопки public void onButtonClick(View view) { // добавляем запись Intent intent = new Intent(this, Adding.class); startActivityForResult(intent, 1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data == null) {return;} String name = data.getStringExtra("name"); String name1 = data.getStringExtra("name1"); String name2 = data.getStringExtra("name2"); db.addRec(name, name1, name2); getSupportLoaderManager().getLoader(0).forceLoad(); } public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(0, CM_DELETE_ID, 0, R.string.delete_record); } public boolean onContextItemSelected(MenuItem item) { if (item.getItemId() == CM_DELETE_ID) { // получаем из пункта контекстного меню данные по пункту списка AdapterView.AdapterContextMenuInfo acmi = (AdapterView.AdapterContextMenuInfo) item .getMenuInfo(); // извлекаем id записи и удаляем соответствующую запись в БД db.delRec(acmi.id); // получаем новый курсор с данными getSupportLoaderManager().getLoader(0).forceLoad(); return true; } return super.onContextItemSelected(item); } protected void onDestroy() { super.onDestroy(); // закрываем подключение при выходе db.close(); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle bndl) { return new MyCursorLoader(this, db); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { scAdapter.swapCursor(cursor); } @Override public void onLoaderReset(Loader<Cursor> loader) { } static class MyCursorLoader extends CursorLoader { DB db; public MyCursorLoader(Context context, DB db) { super(context); this.db = db; } @Override public Cursor loadInBackground() { Cursor cursor = db.getAllData(); try { TimeUnit.SECONDS.sleep(0); } catch (InterruptedException e) { e.printStackTrace(); } return cursor; } } } How to solve this problem?