我正在尝试通过编程添加片段,然后调用其中一个方法。在调用任何片段项时,我得到空指针异常。
Fragment fragment = new HomeFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_inner_container, fragment).commit();
((HomeFragment) fragment).homeSelected(true);
然后在Fragment中
public void homeSelected(boolean val) {
if (val) {
homeButton.setBackgroundColor(getResources().getColor(R.color.header_bg));
} else {
homeButton.setBackgroundColor(getResources().getColor(R.color.screen_bg));
}
}
homeButton始终为null。我检查了一下,发现在这个方法之后调用onActivityCreated。任何解决这个问题的方法。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home, container, false);
listView = (ListView) v.findViewById(R.id.list_view);
homeButton = (Button) v.findViewById(R.id.menu_btn_home);
return v;
}
答案 0 :(得分:0)
您需要致电executePendingTransactions ()才能立即执行。
提交FragmentTransaction后 FragmentTransaction.commit(),它被安排执行 在进程的主线程上异步。如果你想 立即执行任何此类待处理操作,您可以调用它 函数(仅从主线程)这样做。请注意所有回调 和其他相关的行为将在这个电话中完成,所以 小心从哪里调用它。返回
Returns true if there were any pending transactions to be executed.
答案 1 :(得分:0)
在创建视图homeSelected
之前,您可能正在调用方法R.layout.fragment_home
。
首先在活动中进行此调用 -
Fragment fragment = new HomeFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().
replace(R.id.frame_inner_container, fragment).commit();
然后在片段中,首先调用onAttach()
,
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//attach your activity here
}
然后你可以打电话,
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
/*Somewhere here*/
((HomeFragment) fragment).homeSelected(true);
}