В одном из моих фрагментов навигационной панели (NewFragment) есть 3 вкладки (Tab1NewFragment, Tab2NewFragment, Tab3NewFragment), когда при нажатии кнопки в Tab1NewFragment (btn_calculate) в Tab2NewFragment вызывается метод (set_outputs).Однако это говорит фрагмент, не связанный с контекстом.В чем проблема?
* Кстати, причина, по которой я отправляю активность, когда вызываю метод set_outputs (tab2NewFragment_obj.set_outputs (getActivity ());), заключается в том, что когда я пытался получить активность из самого Tab2Newfragment,он выдал NullPointerException, но это решило его.
MainActivity:
TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));
tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = findViewById(R.id.pager);
MyPagerAdapter MyPagerAdapter = new MyPagerAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
viewPager.setAdapter(MyPagerAdapter);
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) {
}
});
Tab1NewFragment:
btn_calculate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tab2NewFragment_obj.set_outputs(getActivity()); **//line478**
}
});
Tab2NewFragment:
public class Tab2NewFragment extends Fragment {
TextView frame_size_result;
//...
public Tab2NewFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.tab2_new_fragment,
container, false);
//find views
result_bmi_textView = view.findViewById(R.id.result_bmi_textView);
//...
return view;
}
public void set_outputs(Context context) {
tab1_new_fragment_prefs = context.getSharedPreferences("input_prefs", Context.MODE_PRIVATE);
if (frame_size > 10.4) {
frame_size_result.setText(getString(R.string.frame_size_small)); **//line 279**
if (formula_type == 1) {
bmr = mainActivity_obj.one_digit((66.5 + (13.75 * weight_value) + (5.003 * height_value) - (6.755 * age_value)) * 90 / 100);
} else if (formula_type == 2) {
bmr = mainActivity_obj.one_digit(((10 * weight_value) + (6.25 * height_value) - (5 * age_value) + 5) * 90 / 100);
}
}
}
Ошибка:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: mydietitian.milad, PID: 1579
java.lang.IllegalStateException: Fragment Tab2NewFragment{3b28efa} not attached to a context.
at android.support.v4.app.Fragment.requireContext(Fragment.java:696)
at android.support.v4.app.Fragment.getResources(Fragment.java:760)
at android.support.v4.app.Fragment.getString(Fragment.java:782)
at mydietitian.milad.Tab2NewFragment.set_outputs(Tab2NewFragment.java:279)
at mydietitian.milad.Tab1NewFragment$11.onClick(Tab1NewFragment.java:478)
at android.view.View.performClick(View.java:5697)
at android.widget.TextView.performClick(TextView.java:10826)
at android.view.View$PerformClick.run(View.java:22526)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
I/Process: Sending signal. PID: 1579 SIG: 9
Application terminated.