मेरे पास एक MainActivity है जिसमें एक BottomNavigationView है जिसमें 3 items है। जब मैं पहली बार ऐप खोलता हूं, तो केवल एक ही सक्षम होता है, पहला।

मेरे पास पहले टुकड़े पर एक RecyclerView है (मेनू में पहला item)। जब मैं RecyclerView में से एक item पर क्लिक करता हूं, तो मैं दूसरे Fragment पर स्विच करना चाहता हूं और दूसरे और तीसरे item को सक्षम करना चाहता हूं।

मैं दूसरे Fragment पर स्विच करने में सक्षम हूं, लेकिन मैं आइटम को फिर से सक्षम नहीं कर सकता।

RecyclerView के साथ पहला Fragment है:

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)
2
Francky380 16 अप्रैल 2020, 03:18

1 उत्तर

सबसे बढ़िया उत्तर

मुख्य गतिविधि में एक BottomNavigationView getBottomNav() विधि बनाएं और फिर इसे onItemClick से प्राप्त करें

MainActivity में:

public BottomNavigationView getBottomNav(){ return findViewById(R.id.bottom_navigation); }

Homefragment में:

// 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();

        ((MainActivity) getActivity()).getBottomNav().getMenu().getItem(1).setEnabled(true);
        //bottomNav.getMenu().getItem(2).setEnabled(true);

    }
2
ygngy 16 अप्रैल 2020, 00:33