Java 更改ViewPager内显示的片段
我有一个显示片段的ViewPager:SearchFragment,FriendFragment。我正在努力做的是将SearchFragment更改为ChatFragment 有很多反馈,但我有一些困难,使任何这些解决方案的工作 我认为我创建接口的方式可能有问题,我在使它作为Java 更改ViewPager内显示的片段,java,android,android-fragments,interface,android-viewpager,Java,Android,Android Fragments,Interface,Android Viewpager,我有一个显示片段的ViewPager:SearchFragment,FriendFragment。我正在努力做的是将SearchFragment更改为ChatFragment 有很多反馈,但我有一些困难,使任何这些解决方案的工作 我认为我创建接口的方式可能有问题,我在使它作为SearchActivity.newInstance(new MyListener{…}) 我现在已经到了该做什么的地步 java.lang.NullPointerException:尝试调用虚拟方法 'android.su
SearchActivity.newInstance(new MyListener{…})
我现在已经到了该做什么的地步
java.lang.NullPointerException:尝试调用虚拟方法
'android.support.v4.app.FragmentTransaction
空值上的android.support.v4.app.FragmentManager.beginTransaction()
对象引用
在
com.example.ashaneen.firebaseapp.adapters.MainScreenAdapter$1.onFragmentChange(MainScreenAdapter.java:44)
在
com.example.ashaneen.firebaseapp.fragments.SearchFragment$4.onComplete(SearchFragment.java:132)
MainScreenAdapter.class
public class MainScreenAdapter extends FragmentPagerAdapter implements SearchFragment.MyListener {
private static final String TAG = "MainScreenAdapter";
private FragmentManager fragmentManager;
private Fragment fragment1;
public MainScreenAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
switch (position)
{
case 0:
if (fragment1 == null)
{
fragment1 = SearchFragment.newInstance(new SearchFragment.MyListener() {
@Override
public void onFragmentChange() {
fragmentManager.beginTransaction().remove(fragment1).commit();
fragment1 = ChatFragment.newInstance();
notifyDataSetChanged();
}
});
}
return fragment1;
case 1:
return new FriendsFragment();
default:
return new ChatFragment();
}
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
@Override
public void onFragmentChange() {
}
SearchFragment.class
public class SearchFragment extends android.support.v4.app.Fragment {
public SearchFragment() {
}
private String TAG = "Profile2Fragment";
public interface MyListener
{
void onFragmentChange();
}
static MyListener myListener = new MyListener() {
public void onFragmentChange() {
}
};
public static SearchFragment newInstance(MyListener myListener) {
SearchFragment.myListener = myListener;
return new SearchFragment();
}
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_search, container, false);
button = view.findViewById(R.id.btn_search);
waitingRoomReference = db.collection("awaiting_room");
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)
{
myListener.onFragmentChange();
}
}
});
return view;
}
试着改变这个
public MainScreenAdapter(FragmentManager fm) {
super(fm);
}
到
看起来你的碎片管理器是空的。连续第二天和它战斗,你就这样进来了。。。非常感谢你,兰扬:不用谢。日志上说你只需要正确阅读就可以了。
public MainScreenAdapter(FragmentManager fm) {
super(fm);
fragmentManager = fm;
}