我有一个MainActivity
,其中有一个BottomNavigationView
,其中有3个items
。当我第一次打开该应用程序时,只有一个启用,第一个。
我在第一个片段(菜单上的第一个RecyclerView
)上有一个item
。当我单击item
中的一个RecyclerView
时,我想切换到第二个Fragment
并启用第二个和第三个item
。
我可以切换到第二个Fragment
,但是无法再次设置项目启用。
[Fragment
的第一个RecyclerView
是:
public class Homefragment extends Fragment implements OnItemClickListener { private ArrayList<fileItem> mfileList = new ArrayList<>(); private RecyclerView mRecyclerView; private fileAdapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; private BottomNavigationView bottomNav; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_home, container, false); Context context = getActivity(); bottomNav = view.findViewById(R.id.bottom_navigation); // Listing all text files String path = Environment.getExternalStorageDirectory().toString()+"/FlexiCounts"; File directory = new File(path); File[] filesList = directory.listFiles(new FilenameFilter() { public boolean accept(File directory, String name) { return name.toLowerCase().endsWith(".txt"); } }); setRecyclerView(view, filesList); return view; } private void setRecyclerView(View view, File[] files){ if (files.length > 0) { for (int i = 0; i < files.length; i++) { mfileList.add(new fileItem(R.drawable.ic_account_balance_black_24dp, files[i].getName().replace(".txt", ""), "25-03-2020", "07-04-2020")); } mRecyclerView = view.findViewById(R.id.fileRecycler); mRecyclerView.setHasFixedSize(true); mLayoutManager = new LinearLayoutManager(getActivity()); mAdapter = new fileAdapter(mfileList, this); mRecyclerView.setLayoutManager(mLayoutManager); mRecyclerView.setAdapter(mAdapter); } } // the magic should happen here ! @Override public void onItemClick(int position) { mfileList.get(position); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container_primary, new Dashboardfragment()).commit(); bottomNav.getMenu().getItem(1).setEnabled(true); //bottomNav.getMenu().getItem(2).setEnabled(true); } }
以下行不起作用:
bottomNav.getMenu().getItem(1).setEnabled(true);
它似乎指向空引用。我认为在
bottomNav
方法中找不到用R.id.bottom_navigation
定义的onCreateView
。实际上,bottom_navigation
包含在MainActivity
layout
中,但这不应该成为问题。我收到此错误:
--------- beginning of crash
2020-04-15 20:09:20.202 8673-8673/com.flexicounts.flexicounts E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.flexicounts.flexicounts, PID: 8673
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Menu android.support.design.widget.BottomNavigationView.getMenu()' on a null object reference
at com.flexicounts.flexicounts.Homefragment.onItemClick(Homefragment.java:145)
at com.flexicounts.flexicounts.fileAdapter$fileViewHolder.onClick(fileAdapter.java:50)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
我有一个MainActivity,其中带有一个BottomNavigationView,其中包含3个项目。当我第一次打开应用程序时,只有一个启用,第一个。我在第一个片段上有一个RecyclerView(...的第一项...
在主要活动中创建BottomNavigationView getBottomNav()
方法,然后从onItemClick
中获取它