2016-01-25 24 views
0

我想加載數據在一個viewpager中使用光標加載程序託管的兩個片段。每次啓動活動時,只有一個fragment1 cursorloader加載數據。 Fragment2載荷時,有一個朝向的變化,並在用於片段1這一點片段1犯規負載data.The代碼是:ViewPager託管兩個碎片與光標加載只加載一個加載程序

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) { 

}} 

用於第二片段中的代碼是:

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) { 

} } 

用於託管代碼活動:

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; 
    } 
}} 

回答

1
private static final int TRANSACTION_LOADER = 0; 
private static final int DEPENDANT_LOADER = 0; 

您使用getActivity(),讓你用一個loadermanager,並設置爲0兩個裝載機的編號,只是改變其中一個常數爲1,所有將會很好

+0

謝謝!!!!!!!!!!!!!!!!!!!!!一切都很好! –