rmanalo
rmanalo

Reputation: 342

Error on RadioGroup onCheckedChangeListener

I am creating a custom dialog fragment with a radiogroup inside. I am getting an error in the line

rdoGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()

As I've seen in my research the RadioGroup.OnCheckedChangeListener() should just be OnCheckedChangeListener() but android studio detects it as an error and tell that the fix is to turn it to RadioGroup.OnCheckedChangeListener()

here's the error

FATAL EXCEPTION: main Process: com.integritynet.lukslofts.services, PID: 10341 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.integritynet.lukslofts.services/com.integritynet.lukslofts.services.main2}: java.lang.NullPointerException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2429) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493) at android.app.ActivityThread.access$800(ActivityThread.java:166) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5584) 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:1268) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at com.integritynet.lukslofts.services.fragment.layoutChooserFragment.onCreateView(layoutChooserFragment.java:39) at android.app.Fragment.performCreateView(Fragment.java:1700) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) at android.app.Activity.performStart(Activity.java:5456) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2402) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2493)  at android.app.ActivityThread.access$800(ActivityThread.java:166)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:136)  at android.app.ActivityThread.main(ActivityThread.java:5584)  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:1268)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)  at dalvik.system.NativeStart.main(Native Method)

here is my code:

public class layoutChooserFragment extends DialogFragment {
    Context ctx;
    String rdo;
    public layoutChooserFragment(){

    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState){
        View vi = inflater.inflate(R.layout.layout_picker, container);
        getDialog().setTitle(R.string.txtLayoutChooser);

        final CheckBox cboRemember = (CheckBox)vi.findViewById(R.id.cboRemember);
        RadioGroup rdoGrp = (RadioGroup)vi.findViewById(R.id.rdoGrpPckr);
        final RadioButton rdoGrid = (RadioButton)vi.findViewById(R.id.rdoGrid);
        final RadioButton rdoTab   = (RadioButton)vi.findViewById(R.id.rdoTab);
        rdoGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (rdoTab.isChecked()) {
                    if (cboRemember.isChecked()) {
                        rdo = "tab";
                        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
                        SharedPreferences.Editor editor = settings.edit();
                        editor.putString("chosenLayout", rdo);
                        editor.commit();
                        Log.d("tag", "chosenLayout: " + rdo);
                    }
                    Intent i = new Intent(ctx, MainActivity.class);
                    startActivity(i);
                } else if (rdoGrid.isChecked()) {
                    if (cboRemember.isChecked()) {
                        Intent i = new Intent(ctx, main2.class);
                        startActivity(i);
                        rdo = "grid";
                        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(ctx);
                        SharedPreferences.Editor editor = settings.edit();
                        editor.putString("chosenLayout", rdo);
                        editor.commit();
                        Log.d("tag", "chosenLayout: " + rdo);
                    }
                    Intent i = new Intent(ctx, servicesGridStyle.class);
                    startActivity(i);
                }
            }
        });
        //dlg.show();
        return vi;

    }
}

Here's the Layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp">

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/rdoGrpPckr">

    <RadioButton
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txtTab"
        android:id="@+id/rdoTab"
        android:textSize="29sp" />

    <RadioButton
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:button="@null"
        android:drawableRight="@android:drawable/btn_radio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txtGrid"
        android:id="@+id/rdoGrid"
        android:textSize="29sp" />
</RadioGroup>

<CheckBox
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/txtRememberChoice"
    android:id="@+id/cboRemember"
    android:textSize="20sp" />
</LinearLayout>

Upvotes: 3

Views: 900

Answers (4)

rain_
rain_

Reputation: 794

Im assuming that you are overriding

@Override
        public void onCheckedChanged(RadioGroup group, int checkedId)
        {

Inside of your

rdoGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {}

right?

I'm checking an app I did where I call from onCreate a custom function setListeners(); where I set all the listeners. Are you calling this functions from you onCreate? Is your radiobutton inizialized globally?

Upvotes: 0

rmanalo
rmanalo

Reputation: 342

here's the layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="5dp">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/rdoGrpPckr">

        <RadioButton
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:button="@null"
            android:drawableRight="@android:drawable/btn_radio"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/txtTab"
            android:id="@+id/rdoTab"
            android:textSize="29sp" />

        <RadioButton
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:button="@null"
            android:drawableRight="@android:drawable/btn_radio"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/txtGrid"
            android:id="@+id/rdoGrid"
            android:textSize="29sp" />
    </RadioGroup>

    <CheckBox
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/txtRememberChoice"
        android:id="@+id/cboRemember"
        android:textSize="20sp" />
</LinearLayout>

Upvotes: 0

krishna
krishna

Reputation: 301

you have to use

rdoGrp.setOnCheckedChangeListener(new OnCheckedChangeListener() {}

rather than

rdoGrp.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {}

Upvotes: 1

user2054910
user2054910

Reputation:

The cause of your issue is that you don't have R.id.rdoGrpPckr in your layout. Maybe you have another RadioGroup but with a little different id. Check out your layout xml and correct in order to fix your issue.

Also please use standard Java class naming conventions for your class name LayoutChooserFragment.

Upvotes: 0

Related Questions