0

I have ListView (inside Fragment) that gets populated with arrayAdapter.I have apply button in each view of listView. I made a listener for apply button i would like to start new fragment once i click on button. And i got nullPointerException at getFragmentManager(). i have tried this, this also but could not able to solve my problem.

This is my ArrayAdaptor code:

public class FullTimeAdapter extends ArrayAdapter<Datalist> {
    private Context mContext;
    private FullTimeJobs mFragment;
    private List<Datalist> datalists = new ArrayList<>();

    public FullTimeAdapter(@NonNull Context context, ArrayList<Datalist> list) {
        super(context, 0, list);
        mContext = context;
        datalists = list;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull final ViewGroup parent) {
        View listView = convertView;
        if (listView == null) {
            listView = LayoutInflater.from(mContext).inflate(R.layout.full_time_datalist, parent, false);
        }

        Button btnApply = listView.findViewById(R.id.part_btn_apply);
        btnApply.setText("Apply");

        btnApply.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment fragment;
                fragment = new Apply();
                FragmentManager fm = fragment.getFragmentManager();
                FragmentTransaction ft = fm.beginTransaction().replace(R.id.container, fragment);
                ft.commit();
            }
        });
        return listView;

    }
}

Logcat:

05-16 17:00:59.566 10150-10150/com.example.innobles.internapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.innobles.internapp, PID: 10150
    java.lang.NullPointerException
        at com.example.innobles.internapp.Adapter.FullTimeAdapter$2.onClick(FullTimeAdapter.java:90)
        at android.view.View.performClick(View.java:4448)
        at android.view.View$PerformClick.run(View.java:18461)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5065)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)
        at dalvik.system.NativeStart.main(Native Method)
ColdFire
  • 6,764
  • 6
  • 35
  • 51
chand mohd
  • 2,363
  • 1
  • 14
  • 27

3 Answers3

0

First create an interface as

interface CustomOnClick {
   void onCustomOnClick();
}

implement this interface in your Fragment from where you are applying adapter and also pass your activity instance in your adapter constructor In your adapter create interface object like

CustomOnClick listener;

and in adapter constructor initialize it

public FullTimeAdapter(@NonNull Context context, ArrayList<Datalist> list, CustomOnClick listener) {
        super(context, 0, list);
        this.listener=listener;
        mContext = context;
        datalists = list;
    }

in adapter's on click method just write following line and move remaining code in Fragments's onCustomClick() method

listener.onCustomClick();

and in your framents' onCustomClick method use getActivity().getFragmentManger()

Mirza Ahmed Baig
  • 5,605
  • 3
  • 22
  • 39
  • getting NPE at `getActivity().getFragmentManager().beginTransaction().replace(R.id.container, new Apply()).commit();` – chand mohd May 16 '18 at 12:59
  • `FATAL EXCEPTION: main Process: com.example.innobles.internapp, PID: 27832 java.lang.NullPointerException at com.example.innobles.internapp.fragment.FullTimeJobs.onCustomClick(FullTimeJobs.java:62) at com.example.innobles.internapp.Adapter.FullTimeAdapter$2.onClick(FullTimeAdapter.java:90) at android.view.View.performClick(View.java:4448) at android.view.View$PerformClick.run(View.java:18461)` – chand mohd May 16 '18 at 13:30
  • are you successfully able to get callback in onCustomClick() method?? – Mirza Ahmed Baig May 16 '18 at 13:56
  • just remove everything from that method and simply log something – Mirza Ahmed Baig May 16 '18 at 13:58
  • yes .. when i,m putting log then while clicking button log is triggered.I think problem is with creating new fragment somewhere is context – chand mohd May 17 '18 at 05:00
  • Okay Use this to open fragment FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container, fragment); – Mirza Ahmed Baig May 17 '18 at 06:43
0

Try FragmentManager fm = getActivity().getFragmentManager();

vincent nyanga
  • 386
  • 1
  • 2
  • 6
  • @JosefAdamcik Take a minute and read [this Meta](https://meta.stackoverflow.com/questions/287563/youre-doing-it-wrong-a-plea-for-sanity-in-the-low-quality-posts-queue) before declaring this isn't an answer – Machavity May 16 '18 at 20:00
0

Finally it works but do not know how..

here what i did :

 ((AppCompatActivity) mContext).getSupportFragmentManager().beginTransaction().replace(R.id.container, new Apply()).commit();

instead of

 getActivity().getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container, fragment);
fragmentTransaction.commit();
chand mohd
  • 2,363
  • 1
  • 14
  • 27