Reputation: 140
I am trying to load data in two fragments hosted in a viewpager using cursorloaders. Everytime Ilaunch the activity only one fragment1 cursorloader loads data. Fragment2 loads when there is an orientation change and at this point fragment1 doesnt load data.The code for fragment1 is:
public class TransactionFragment extends Fragment
implements LoaderManager.LoaderCallbacks<Cursor>{
private static final int TRANSACTION_LOADER = 0;
private int walletId;
private RecyclerView transactionRecycler;
TransactionCursorAdapter adapter;
public TransactionFragment() {
// Required empty public constructor
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
walletId=WalletViewDashboardActivity.walletId;
getActivity().getSupportLoaderManager().initLoader(TRANSACTION_LOADER, null, this);
}
@Override
public void onResume() {
super.onResume();
getActivity().getSupportLoaderManager().restartLoader(TRANSACTION_LOADER, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView=inflater.inflate(R.layout.fragment_transaction, container, false);
transactionRecycler = (RecyclerView) rootView.findViewById(R.id.recycler_transactions);
transactionRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
return rootView;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String sTransactionSelection =
CarepayContract.InvoiceEntry.TABLE_NAME +
"." + CarepayContract.InvoiceEntry.COLUMN_WALLET_ID + " = ? ";
String[] sArguments = {String.valueOf(walletId)};
return new CursorLoader(
getActivity(),
CarepayContract.InvoiceEntry.CONTENT_URI,
null,
sTransactionSelection,
sArguments,
null
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.e("Transactions", String.valueOf(data.getCount()));
adapter = new TransactionCursorAdapter(getActivity(), data);
transactionRecycler.setAdapter(adapter);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}}
The code for the second fragment is:
public class DependantFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
private RecyclerView recyclerView;
private static final int DEPENDANT_LOADER = 0;
private int walletId;
private DependantCursorAdapter adapter;
public DependantFragment() {}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
walletId=WalletViewDashboardActivity.walletId;
recyclerView.setAdapter(adapter);
getActivity().getSupportLoaderManager().initLoader(DEPENDANT_LOADER, null, this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
recyclerView.setAdapter(adapter);
getActivity().getSupportLoaderManager().restartLoader(DEPENDANT_LOADER, null, this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_dependant, container, false);
recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_dependants);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return rootView;
}
@Override
public android.support.v4.content.Loader<Cursor> onCreateLoader(int id, Bundle args) {
String sDependantSelection =
CarepayContract.UserEntry.TABLE_NAME +
"." + CarepayContract.UserEntry.COLUMN_TYPE + " = ? AND " + CarepayContract.UserEntry.TABLE_NAME +
"." + CarepayContract.UserEntry.COLUMN_WALLET_ID + " = ?";
String[] sArguments = {"1", String.valueOf(walletId)};
return new CursorLoader(
getActivity(),
CarepayContract.UserEntry.DEPENDANT_URI,
null,
sDependantSelection,
sArguments,
null
);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
Log.e("Dependant", String.valueOf(data.getCount()));
adapter = new DependantCursorAdapter(getActivity(), data);
recyclerView.setAdapter(adapter);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
} }
The code for the hosting activity is:
public class WalletViewDashboardActivity extends AppCompatActivity {
public static int walletId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wallet_view_dashboard);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
walletId = Integer.parseInt(getIntent().getStringExtra("wallet_id"));
TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Transactions"));
tabLayout.addTab(tabLayout.newTab().setText("Dependants"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
final WalletViewPagerAdapter adapter = new WalletViewPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
public class WalletViewPagerAdapter extends FragmentStatePagerAdapter {
int mNumOfTabs;
public WalletViewPagerAdapter(FragmentManager fm, int NumOfTabs) {
super(fm);
this.mNumOfTabs = NumOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new TransactionFragment();
case 1:
return new DependantFragment();
default:
return null;
}
}
@Override
public int getCount() {
return mNumOfTabs;
}
}}
Upvotes: 0
Views: 655
Reputation: 1372
private static final int TRANSACTION_LOADER = 0;
private static final int DEPENDANT_LOADER = 0;
You use getActivity(), so you use one loadermanager and set 0 as id for both loaders, just change one of constants to 1 and all will be fine
Upvotes: 1