【发布时间】:2022-01-12 07:27:46
【问题描述】:
我使用 mAdapter.getTotalPriceInRecyclerView() 在 viewpage2+Tablayout 中获取当前所选页面的总价。
但是会导致NullPointerException,因为mAdapter是在onCreateView方法中创建的。
如何确保 mAdapter 已初始化?
我使用 viewpage2 创建新的 Fragment (TheFragmentClass.newInstance()) 而不是 beginTransaction().commit
private boolean createFragment(int tabLimited) {
if (mVp2Adapter.getItemCount() >= tabLimited) {
return false;
}
String tabText = getTimeOfHMS();
SettlementProductItemFragment fragment = SettlementProductItemFragment.newInstance(); // new intance
mVp2Adapter.addFragment(tabText, fragment); // add to viewpage2's adapter
mTabSettlementProduct.selectTab(mTabSettlementProduct.getTabAt(
mVp2Adapter.getItemCount() - 1));
return true;
}
public void addFragment(String title, Fragment fragment) {
if (mFragmentTitles.contains(title)) {
Log.e(TAG, "addFragment failed: mFragmentTitles.contains(" + title + ")");
return;
}
mFragments.put(title, fragment);
mFragmentTitles.add(title);
updateHashMap();
notifyItemInserted(mFragmentTitles.size() - 1);
}
这是我的 SettlementProductItemFragment 类。
public class SettlementProductItemFragment extends Fragment {
private RecyclerView mRvProductInFragment;
public SettlementProductItemFragment() {
}
public static SettlementProductItemFragment newInstance() {
SettlementProductItemFragment fragment = new SettlementProductItemFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
private SettlementProductItemRecyclerViewAdapter mAdapter;
public double getTotalPriceInFragment() {
if (mAdapter == null) {
throw new NullPointerException("mAdapter(SettlementProductItemRecyclerViewAdapter) CAN NOT BE NULL");
}
return mAdapter.getTotalPriceInRecyclerView();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_settlement_product_item_list, container, false);
Log.e("getTotalPriceInFragment", "onCreateView: " + view.getClass().toString());
// Set the adapter
if (view instanceof RecyclerView) {
Context context = view.getContext();
mAdapter = new SettlementProductItemRecyclerViewAdapter(context, getProducts());
mRvProductInFragment = (RecyclerView) view;
mRvProductInFragment.setLayoutManager(new LinearLayoutManager(context));
mRvProductInFragment.setAdapter(mAdapter);
}
return view;
}
}
【问题讨论】:
标签: android android-fragments android-viewpager android-tablayout android-viewpager2