![](/img/trans.png)
[英]Why am I getting a null value when trying to access a fragment view from the parent activity?
[英]Fragment View is Null When Called From Parent Activity
我有一個 Activity 及其子 Fragment,其中包含我在其中生成按鈕的LinearLayout
。 創建片段后,一切正常。 但是,當父 Activity 下載新項目時,我調用片段中用於生成按鈕並將它們添加到視圖的方法,但LinearLayout
返回 null,我不知道為什么。 我要么需要修復它,要么找到一種方法來“重新顯示”我的片段。 下面是相關代碼:
歌曲片段:
LinearLayout linearLayout;
DatabaseHelper databaseHelper;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_song, container, false);
linearLayout = rootView.findViewById(R.id.songFragmentMainLayout);
databaseHelper = new DatabaseHelper(getActivity());
return rootView;
}
@Override
public void onResume() {
super.onResume();
RefreshButtons();
}
public void RefreshButtons(){
linearLayout.removeAllViews(); //this line is where the NullPointerException is called
...
}
主要活動:
//refresh fragment view
SongFragment fragment = (SongFragment) sectionsPagerAdapter.getItem(0);
if(downloadQueue.size() == 0){
fragment.RefreshButtons();
Toast.makeText(context, "New songs downloaded", Toast.LENGTH_SHORT).show();
}
...
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new SongFragment();
break;
case 1:
fragment = new PlaceholderFragment();
break;
}
return fragment;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Songs";
case 1:
return "Playlists";
}
return null;
}
}
謝謝你的幫助。
方法fragment.RefreshButtons();
返回一個NPE,因為如果你像你應該的那樣實現了SectionsPagerAdapter
, getItem()
返回一個尚未附加到片段管理器的片段的新實例,因此導致Nullpointer exception
。
所以你應該做的是獲得一個當前活動的片段實例,如下所示:
Fragment frag = (Fragment) mViewPager.getAdapter().instantiateItem(mViewPager, 0);
0
是您的片段的位置,例如,如果您有 3 個片段,則0
將返回第一個片段實例等...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.