我正在尝试按照用户@sunil-sunny的一个给定示例,即
您可以像这样创建静态变量
static FragmentB f; public static FragmentB newInstance(String title) { FragmentB f = new FragmentB(); Bundle b = new Bundle(); b.putString(ARG_STATION_TITLE, title); f.setArguments(b); return f; }
您可以使用
getInstance()
方法获取实例 fragmentBpublic static FragmentB getInstance(){ return f; }
像这样调用
FragmentB.getInstance().methodinFragmentB();
但出于某种原因,我得到了NullPointerException
。
在我的片段中,我有:
static ProductListFragment fragment;
public static ProductListFragment newInstance(Category category, SubCategory subCategory) {
Bundle args = new Bundle();
args.putParcelable(AppConstants.FLAG_CATEGORY, category);
args.putParcelable(AppConstants.FLAG_SUBCATEGORY, subCategory);
ProductListFragment fragment = new ProductListFragment();
fragment.setArguments(args);
return fragment;
}
public static ProductListFragment getInstance(){
return fragment;
}
在另一个片段中,我调用方法detachFragment
来关闭当前片段并重新加载上一个片段中更新的列表:
// We close the fragment and reload the list
public void detachFragment(String tag) {
transition.reverseTransition(100);
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
Fragment fragment = fragmentManager.findFragmentByTag(tag);
if (fragment != null) {
fragmentManager
.beginTransaction()
.disallowAddToBackStack()
.setCustomAnimations(R.anim.slide_up_bottom_sheet, R.anim.slide_down_bottom_sheet)
.remove(fragment)
.commitNow();
ProductListFragment.getInstance().reloadProducts(); // Reload Fragment
}
}
Logcat sais,下一行返回Null:
...
ProductListFragment.getInstance().reloadProducts(); // Reload Fragment
...
答案 0 :(得分:0)
当你调用ProductListFragment.getInstance().reloadProducts();
时,你从这个函数返回static ProductListFragment fragment
但是static ProductListFragment fragment
是没有初始化的,返回null。
答案 1 :(得分:0)
使用以下代码
static ProductListFragment fragment;
public static ProductListFragment newInstance(Category category, SubCategory subCategory) {
Bundle args = new Bundle();
args.putParcelable(AppConstants.FLAG_CATEGORY, category);
args.putParcelable(AppConstants.FLAG_SUBCATEGORY, subCategory);
//Replace this line
// ProductListFragment fragment = new ProductListFragment();
//with this
fragment = new ProductListFragment();
fragment.setArguments(args);
return fragment;
}
public static ProductListFragment getInstance(){
return fragment;
}
答案 2 :(得分:0)
正如Jaydeep Patel sais所说:
检查此行ProductListFragment fragment = new ProductListFragment();并删除ProductListFragment
我删除了一个新片段ProductListFragment的声明,它正在工作。我正在初始化相同变量(同名)的2倍。