当我点击FloatingActionButton时,我想调用Fragment方法 我正在使用Butterknife。
错误:
PID:9956 java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void com.fischerdaniel.testapp.FirstFragment.setTvText()'
MainActicity的一部分:
@OnClick({R.id.fab_one, R.id.fab_two, R.id.fab_three}) public void test(View view) {
switch (view.getId()) {
case R.id.fab_three:
FirstFragment firstFragment = (FirstFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_first);
firstFragment.setTvText();
break;
default:
break;
}
}
片段的一部分:
@BindView(R.id.et_one) EditText etOne;
@BindView(R.id.et_two) EditText etTwo;
@BindView(R.id.tv_one) TextView tvOne;
@BindView(R.id.tv_two) TextView tvTwo;
private Unbinder unbinder;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_first, container, false);
unbinder = ButterKnife.bind(this, view);
return view;
}
protected void setTvText() {
tvOne.setText(etOne.getText());
tvTwo.setText(etTwo.getText());
}
答案 0 :(得分:1)
请参阅此链接:findFragmentById always returns null
创建片段时,请使用:
add(int id, Fragment fragment, String tag)
然后获取你的片段,使用:
findFragmentByTag(String tag)
答案 1 :(得分:0)
public void onMenuItemClick(View clickedView, int position) {
switch (position){
case 1:
fragmentChanger("Notifications",new notifyFragment());
break;
case 2:
fragmentChanger("QR Code",new qrFragment());
break;
case 3:
fragmentChanger("User ID",new MainFragment());
break;
case 4:
fragmentChanger("Settings",new settingsFragment());
break;
default:
Toast.makeText(this, "Clicked on position: " + position, Toast.LENGTH_SHORT).show();
break;
}
}
//function that does the trasaction when a fragment object is passed
//R.id.container is my default frame
public void fragmentChanger(String title, Object expectedFragment){
// mToolBarTextView.setText(title);
transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.container, (Fragment) expectedFragment);
transaction.addToBackStack(null);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
transaction.commit();
}
答案 2 :(得分:0)
从Activity中调用片段方法,如下所示,
对我有用
FirstFragment firstFragment =(FirstFragment)getSupportFragmentManager().getFragments().get(0);
firstFragment.yourmethod();
这里0是您的片段位置。