如何从android底部导航打开现有片段上的新片段

如何从android底部导航打开现有片段上的新片段,android,android-fragments,android-bottomnav,Android,Android Fragments,Android Bottomnav,正如您在下面看到的,我从底部导航器中获得了这个片段布局: 所以,当应用程序用户从循环视图中单击卡片项时,我想在这个搜索片段上打开另一个片段。我正试图解决此问题,但出现以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: mobhair.com.br, PID: 538 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean andr

正如您在下面看到的,我从底部导航器中获得了这个片段布局:

所以,当应用程序用户从循环视图中单击卡片项时,我想在这个搜索片段上打开另一个片段。我正试图解决此问题,但出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: mobhair.com.br, PID: 538
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$ViewHolder.shouldIgnore()' on a null object reference
    at android.support.v7.widget.RecyclerView.findMinMaxChildLayoutPositions(RecyclerView.java:4101)
    at android.support.v7.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3835)
我真的不知道是哪个问题。苏,你能帮帮我吗

请遵循我迄今为止所做的:

搜索片段:

public class SearchFragment extends Fragment {

    private SearchViewAdataper searchViewAdataper;
    private RecyclerView recyclerView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.search_screen_fragment, container, false);
        final ProgressDialog progressDialog = new ProgressDialog(view.getContext());

        Toolbar mToolbar = (Toolbar) view.findViewById(R.id.toolbar);
        mToolbar.setTitleTextColor(Color.WHITE);
        mToolbar.setTitle(R.string.title_search);

        progressDialog.setMessage(getString(R.string.loading_data));
        recyclerView = (RecyclerView) view.findViewById(R.id.search_recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, false));

        SearchManager searchManager = new SearchManager(view.getContext());
        searchManager.getAllProfessions(new SearchServiceListener() {
            @Override
            public void onSuccess(List<SearchDataModel> searchDataModels) {
                searchViewAdataper = new SearchViewAdataper(getContext(), searchDataModels);
                recyclerView.setAdapter(searchViewAdataper);
                progressDialog.dismiss();
            }

            @Override
            public void onFail(Throwable t) {
                progressDialog.dismiss();
                Toast.makeText(getContext(), R.string.communication_server_problem, Toast.LENGTH_LONG).show();
            }
        });

        return view;
    }
}
公共类SearchFragment扩展了片段{
私有SearchViewAdataper搜索视图Adataper;
私人回收站;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.search\u screen\u fragment,container,false);
final ProgressDialog ProgressDialog=新建ProgressDialog(view.getContext());
Toolbar mToolbar=(Toolbar)view.findViewById(R.id.Toolbar);
mToolbar.setTitleTextColor(Color.WHITE);
mToolbar.setTitle(R.string.title\u搜索);
progressDialog.setMessage(getString(R.string.loading_data));
recyclerView=(recyclerView)view.findViewById(R.id.search\u recyclerView);
setLayoutManager(新的LinearLayoutManager(view.getContext(),LinearLayoutManager.VERTICAL,false));
SearchManager SearchManager=新的SearchManager(view.getContext());
searchManager.getAllProfessions(新的SearchServiceListener(){
@凌驾
成功时公共无效(列出searchDataModels){
SearchViewAdatape=新的SearchViewAdatape(getContext(),searchDataModels);
recyclerView.setAdapter(SearchViewAdapter);
progressDialog.disclose();
}
@凌驾
失效时的公共无效(可丢弃的t){
progressDialog.disclose();
Toast.makeText(getContext(),R.string.communication_server_problem,Toast.LENGTH_LONG).show();
}
});
返回视图;
}
}
SearchSectionAdapter:在这里它管理所有卡片项目,并从卡片项目中单击Listener以调用新片段

注意:我将只放置setOnClickListener实现。如有必要,所有的实施让我知道,我可以更新这个问题

holder.mSearchItemImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {

            ProfessionalManager professionalManager = new ProfessionalManager(v.getContext());
            professionalManager.getAllProfessionalByProfessionDescription(singleItem.getDescription(), new ProfessionalServiceListener() {
                @Override
                public void onSuccess(List<Professional> professionals) {
                    /*Intent intent = new Intent(v.getContext(), ProfessionalListActivity.class);
                    v.getContext().startActivity(intent);*/
                    Fragment fragment = new ProfessionalListFragment();
                    FragmentTransaction ft = ((FragmentActivity)context)
                            .getSupportFragmentManager()
                            .beginTransaction();
                    ft.replace(R.id.search_recyclerView, fragment);
                    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
                    ft.addToBackStack(null);
                    ft.commit();
                }

                @Override
                public void onFail(Throwable t) {

                }
            });
        }
    });
holder.mSearchItemImage.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(最终视图v){
ProfessionalManager=new ProfessionalManager(v.getContext());
professionalManager.getAllProfessionalByProfessionDescription(singleItem.getDescription(),new ProfessionalServiceListener()){
@凌驾
成功时公开作废(列出专业人员){
/*Intent Intent=新的Intent(v.getContext(),ProfessionalListActivity.class);
v、 getContext().startActivity(意图)*/
Fragment Fragment=new ProfessionalListFragment();
FragmentTransaction ft=((FragmentActivity)上下文)
.getSupportFragmentManager()
.beginTransaction();
ft.replace(R.id.search\u recyclerView,fragment);
ft.setTransition(碎片事务处理、传输、碎片淡入淡出);
ft.addToBackStack(空);
ft.commit();
}
@凌驾
失效时的公共无效(可丢弃的t){
}
});
}
});

您在此处使用recyclerView引用

recyclerView = (RecyclerView) view.findViewById(R.id.search_recyclerView);
再次使用recyclerView替换为导致问题的片段

ft.replace(R.id.search_recyclerView, fragment);

您需要
布局来替换它

谢谢你的评论。你知道我怎样才能在适配器中做到这一点吗?((视图组)getView().getParent()).getId()