Search code examples
androidandroid-tabhost

Radio button to get a simple tab effect in android


How to create a setting such that there are two radiobuttons on the layout

I have made a better representation from my last question

Radio buttons

  • RadioButton1
  • RadioButton2

enter image description here


Click on RadioButton1 .. Activity1 should display on the same screen

Click on RadioButton1 again Activity2 should display on the same screen

similarly to RadioButton2


This i have performed using tabs with tabhost

Since the design of tabhost is rigid ..... is it possible to make as above


If so, How can it be done ....?

{edit}

I didnt know how to use radiobutton but i have tried something similar

MainActivity.java

public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.layout.activity_main, menu);
            return true;
        }

    }

Fragment_1.java

public class Fragment_1 extends Fragment{

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub      

            View view = inflater.inflate(R.layout.fragment_fragment_1, container, false);

            final EditText edtxtPersonName_Fragment = (EditText) view.findViewById(R.id.edtxtPersonName);
            Button btnSayHi_Fragment = (Button) view.findViewById(R.id.btnSayHi);

            btnSayHi_Fragment.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub

                    String name = edtxtPersonName_Fragment.getText().toString();

                    FragmentManager fm = getFragmentManager();
                    Fragment_2 f2 = (Fragment_2) fm.findFragmentById(R.id.fragment_content_2);

                    if(f2 != null && f2.isInLayout())
                    {
                        f2.setName(name);
                    }

                    Activity activity = getActivity();

                    if(activity != null)
                    {
                        Toast.makeText(activity, "Say&ing Hi in Progress...", Toast.LENGTH_LONG).show();
                    }
                }
            });

            return view;


        }

    }

Fragment_2.java

public class Fragment_2 extends Fragment {

    View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        view = inflater.inflate(R.layout.fragment_fragment_2, container, false);        
        return view;
    }

    public void setName(String name)
    {
        TextView txtName = (TextView) view.findViewById(R.id.txtViewResult);
        txtName.setText("Hi " + name);
    }

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment
        android:id="@+id/fragment_content_1"
        android:name="com.example.fragmentexample.Fragment_1"
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="fill_parent" >
    </fragment>

    <fragment
        android:id="@+id/fragment_content_2"
        android:name="com.example.fragmentexample.Fragment_2"
        android:layout_width="0dip"
        android:layout_weight="0.50"
        android:layout_height="fill_parent" >

        <!-- Preview: layout=@layout/fragment_basic -->
    </fragment>

</LinearLayout>

Still i got log errors

LOG::

10-13 15:56:44.837: D/AndroidRuntime(326): Shutting down VM
10-13 15:56:44.837: W/dalvikvm(326): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-13 15:56:45.117: E/AndroidRuntime(326): FATAL EXCEPTION: main
10-13 15:56:45.117: E/AndroidRuntime(326): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fragment/com.example.fragment.MainActivity}: android.view.InflateException: Binary XML file line #5: Error inflating class fragment
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.os.Handler.dispatchMessage(Handler.java:99)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.os.Looper.loop(Looper.java:123)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread.main(ActivityThread.java:3683)
10-13 15:56:45.117: E/AndroidRuntime(326):  at java.lang.reflect.Method.invokeNative(Native Method)
10-13 15:56:45.117: E/AndroidRuntime(326):  at java.lang.reflect.Method.invoke(Method.java:507)
10-13 15:56:45.117: E/AndroidRuntime(326):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-13 15:56:45.117: E/AndroidRuntime(326):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-13 15:56:45.117: E/AndroidRuntime(326):  at dalvik.system.NativeStart.main(Native Method)
10-13 15:56:45.117: E/AndroidRuntime(326): Caused by: android.view.InflateException: Binary XML file line #5: Error inflating class fragment
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-13 15:56:45.117: E/AndroidRuntime(326):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.Activity.setContentView(Activity.java:1657)
10-13 15:56:45.117: E/AndroidRuntime(326):  at com.example.fragment.MainActivity.onCreate(MainActivity.java:16)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-13 15:56:45.117: E/AndroidRuntime(326):  ... 11 more
10-13 15:56:45.117: E/AndroidRuntime(326): Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.example.fragment-1.apk]
10-13 15:56:45.117: E/AndroidRuntime(326):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
10-13 15:56:45.117: E/AndroidRuntime(326):  at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
10-13 15:56:45.117: E/AndroidRuntime(326):  at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.createView(LayoutInflater.java:471)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549)
10-13 15:56:45.117: E/AndroidRuntime(326):  at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66)
10-13 15:56:45.117: E/AndroidRuntime(326):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
10-13 15:56:45.117: E/AndroidRuntime(326):  ... 20 more
10-13 15:56:49.207: I/Process(326): Sending signal. PID: 326 SIG: 9

Solution

  • Don't use RadioButtons, you should use TabHost for this.

    See the answer here: https://stackoverflow.com/a/17236958/819355

    Another good option is to use ViewPager, see official docs here: http://developer.android.com/reference/android/support/v4/view/ViewPager.html