In the app that I'm developing, I have a Menu with icons that is on the right and left edges of the screen, and it mantains there in all the app's activities.
What I've done is first create the "MenuView" class activity where are defined all the menu's icons and their onClickListeners. Then the layout for this activity. In the layout I stablished 2 linearlayout's wich are each one on the border's of the screen (These refers to the menu) and a LinearLayout with the blank space inside the columns, where the other activities must go.
MenuViewActivity.java
public class MenuViewActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_view);
...
((ImageView)this.findViewById(R.id.navButton)).setOnClickListener(launch_nav);
final OnClickListener launch_nav = new OnClickListener() {
@Override
public void onClick(View v) {
getBaseContext().startActivity(new Intent(getBaseContext(), Navigation.class));
}
};
...
menu_view.xml
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.MenuViewActivity" >
layout="@layout/custom_tittlebar" >
android:id="@+id/lefthandmenu"
android:layout_width="85dip"
android:layout_height="match_parent"
android:layout_below="@id/title"
android:layout_alignParentLeft="true"
android:orientation="vertical"
android:background="@drawable/border_cut" >
... />
...
android:id="@+id/righthandmenu"
android:layout_width="85dip"
android:layout_height="match_parent"
android:layout_below="@id/title"
android:layout_alignParentRight="true"
android:orientation="vertical"
android:background="@drawable/border_cut" >
... />
...
android:id="@+id/activitycontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/righthandmenu"
android:layout_toRightOf="@id/lefthandmenu"
android:layout_below="@id/title"
android:orientation="vertical" >
So, what I must do now is to tell the program that other activities must go inside this last layout. For this, I do this in for example the Main class. I extend the activity to MenuViewActivity and the I inflate the layout.
MainClass.java
public class MainClass extends MenuViewActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
LinearLayout inside_menu_view = (LinearLayout)findViewById(R.id.activitycontent);
View this_layout = getLayoutInflater().inflate(R.layout.main, inside_menu_view);
inside_menu_view.addView(this_layout);
But I'm getting an error on the logcat:
10-31 09:14:05.314: D/AndroidRuntime(1703): Shutting down VM
10-31 09:14:05.314: W/dalvikvm(1703): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-31 09:14:05.324: E/AndroidRuntime(1703): FATAL EXCEPTION: main
10-31 09:14:05.324: E/AndroidRuntime(1703): **java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MainClass}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.MenuViewActivity**
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.os.Handler.dispatchMessage(Handler.java:99)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.os.Looper.loop(Looper.java:130)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-31 09:14:05.324: E/AndroidRuntime(1703): at java.lang.reflect.Method.invokeNative(Native Method)
10-31 09:14:05.324: E/AndroidRuntime(1703): at java.lang.reflect.Method.invoke(Method.java:507)
10-31 09:14:05.324: E/AndroidRuntime(1703): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-31 09:14:05.324: E/AndroidRuntime(1703): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-31 09:14:05.324: E/AndroidRuntime(1703): at dalvik.system.NativeStart.main(Native Method)
10-31 09:14:05.324: E/AndroidRuntime(1703): **Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.MenuViewActivity**
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.createView(LayoutInflater.java:508)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-31 09:14:05.324: E/AndroidRuntime(1703): at com.example.MainClass.onCreate(MainClass.java:67)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-31 09:14:05.324: E/AndroidRuntime(1703): ... 11 more
10-31 09:14:05.324: E/AndroidRuntime(1703): **Caused by: java.lang.NoSuchMethodException: MenuViewActivity(Context,AttributeSet)**
10-31 09:14:05.324: E/AndroidRuntime(1703): at java.lang.Class.getMatchingConstructor(Class.java:643)
10-31 09:14:05.324: E/AndroidRuntime(1703): at java.lang.Class.getConstructor(Class.java:472)
10-31 09:14:05.324: E/AndroidRuntime(1703): at android.view.LayoutInflater.createView(LayoutInflater.java:480)
10-31 09:14:05.324: E/AndroidRuntime(1703): ... 19 more
UPDATE - After modofications still not working, this is the LogCat
10-31 09:35:17.521: E/AndroidRuntime(1676): FATAL EXCEPTION: main
10-31 09:35:17.521: E/AndroidRuntime(1676): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/com.example.MainClass}: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.MenuViewActivity
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.os.Handler.dispatchMessage(Handler.java:99)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.os.Looper.loop(Looper.java:130)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread.main(ActivityThread.java:3683)
10-31 09:35:17.521: E/AndroidRuntime(1676): at java.lang.reflect.Method.invokeNative(Native Method)
10-31 09:35:17.521: E/AndroidRuntime(1676): at java.lang.reflect.Method.invoke(Method.java:507)
10-31 09:35:17.521: E/AndroidRuntime(1676): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-31 09:35:17.521: E/AndroidRuntime(1676): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-31 09:35:17.521: E/AndroidRuntime(1676): at dalvik.system.NativeStart.main(Native Method)
10-31 09:35:17.521: E/AndroidRuntime(1676): Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class com.example.MenuViewActivity
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.createView(LayoutInflater.java:518)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-31 09:35:17.521: E/AndroidRuntime(1676): at com.masermic.medialauncher.LauncherActivity.onCreate(LauncherActivity.java:67)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-31 09:35:17.521: E/AndroidRuntime(1676): ... 11 more
10-31 09:35:17.521: E/AndroidRuntime(1676): Caused by: java.lang.reflect.InvocationTargetException
10-31 09:35:17.521: E/AndroidRuntime(1676): at java.lang.reflect.Constructor.constructNative(Native Method)
10-31 09:35:17.521: E/AndroidRuntime(1676): at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
10-31 09:35:17.521: E/AndroidRuntime(1676): at android.view.LayoutInflater.createView(LayoutInflater.java:505)
10-31 09:35:17.521: E/AndroidRuntime(1676): ... 19 more
10-31 09:35:17.521: E/AndroidRuntime(1676): Caused by: java.lang.NullPointerException
10-31 09:35:17.521: E/AndroidRuntime(1676): at com.mexample.MenuViewActivity.(MenuViewActivity.java:55)
10-31 09:35:17.521: E/AndroidRuntime(1676): ... 22 more