Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Android

java.lang.IllegalArgumentException: No view found for id 0x7f090047 ("project name":id/content) for fragment FmMenu

Hi! I am new here and excited to learn new stuff with this community!

Just wanted to share an issue that I have with a project that I am doing for a client.

Been trying to find a solution to this problem:

if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.linear, fragment).commit();

                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                setTitle(navMenuTitles[position]);
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                // error in creating fragment
                Log.e("BunBunUp", "MenuActivity - Error cuando se creo el fragment");

Whenever I enter to my IntroActivity and press the button to take me to MenuActivity, it crashes.

Here is the error log:

   02-16 18:49:49.393    1208-1208/com.wlodsgn.bunbunup E/FragmentManager No view found for id 0x7f090047 (com.wlodsgn.bunbunup:id/linear) for fragment FmMenu{b1e537f0 #0 id=0x7f090047}
    02-16 18:49:49.393    1208-1208/com.wlodsgn.bunbunup E/FragmentManager Activity state:
    02-16 18:49:49.423    1208-1208/com.wlodsgn.bunbunup E/FragmentManager Local FragmentActivity b1e1d1b8 State:
    02-16 18:49:49.423    1208-1208/com.wlodsgn.bunbunup E/FragmentManager mCreated=falsemResumed=false mStopped=false mReallyStopped=false
    02-16 18:49:49.423    1208-1208/com.wlodsgn.bunbunup E/FragmentManager mLoadersStarted=false
    02-16 18:49:49.443    1208-1208/com.wlodsgn.bunbunup E/FragmentManager FragmentManager misc state:
    02-16 18:49:49.443    1208-1208/com.wlodsgn.bunbunup E/FragmentManager mActivity=com.wlodsgn.bunbunup.MenuActivity@b1e1d1b8
    02-16 18:49:49.443    1208-1208/com.wlodsgn.bunbunup E/FragmentManager mContainer=android.support.v4.app.FragmentActivity$2@b1e1ed08
    02-16 18:49:49.453    1208-1208/com.wlodsgn.bunbunup E/FragmentManager mCurState=1 mStateSaved=false mDestroyed=false
    02-16 18:49:49.453    1208-1208/com.wlodsgn.bunbunup E/FragmentManager View Hierarchy:
    02-16 18:49:49.453    1208-1208/com.wlodsgn.bunbunup E/FragmentManager com.android.internal.policy.impl.PhoneWindow$DecorView{b1e23d08 V.E..... ... 0,0-0,0}
    02-16 18:49:49.473    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.LinearLayout{b1e24280 V.E..... ... 0,0-0,0}
    02-16 18:49:49.473    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.view.ViewStub{b1e24da8 G.E..... ... 0,0-0,0 #102030e}
    02-16 18:49:49.473    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.FrameLayout{b1e25038 V.E..... ... 0,0-0,0}
    02-16 18:49:49.473    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v7.internal.widget.ActionBarOverlayLayout{b1e2db28 V.E..... ... 0,0-0,0 #7f09002f app:id/decor_content_parent}
    02-16 18:49:49.483    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v7.internal.widget.NativeActionModeAwareLayout{b1e2f758 V.E..... ... 0,0-0,0 #1020002 android:id/content}
    02-16 18:49:49.483    1208-1208/com.wlodsgn.bunbunup E/FragmentManager [ 02-16 18:49:49.513  1208: 1208 E/FragmentManager ]
        android.support.v4.widget.DrawerLayout{b1e2c058 VFE..... ... 0,0-0,0 #7f090042 app:id/drawer_layout}
    02-16 18:49:49.513    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.LinearLayout{b1e1fa90 V.E..... ... 0,0-0,0}
    02-16 18:49:49.523    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v4.view.ViewPager{b1e29568 VFED.... ... 0,0-0,0 #7f090043 app:id/pager}
    02-16 18:49:49.523    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.ListView{b1e44148 VFED.VC. ... 0,0-0,0 #7f090044 app:id/listView1}
    02-16 18:49:49.523    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.ListView{b1dd80b8 VFED.VC. ... 0,0-0,0 #7f090045 app:id/list_slidermenu}
    02-16 18:49:49.523    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v7.internal.widget.ActionBarContainer{b1e2fcd0 V.ED.... ... 0,0-0,0 #7f090030 app:id/action_bar_container}
    02-16 18:49:49.533    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v7.widget.Toolbar{b1e30898 V.E..... ... 0,0-0,0 #7f090031 app:id/action_bar}
    02-16 18:49:49.533    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.ImageButton{b1e39da8 VFED..C. ... 0,0-0,0}
    02-16 18:49:49.533    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.widget.TextView{b1e28a60 V.ED.... ... 0,0-0,0}
    02-16 18:49:49.533    1208-1208/com.wlodsgn.bunbunup E/FragmentManager android.support.v7.internal.widget.ActionBarContextView{b1e43a50 G.E..... ... 0,0-0,0 #7f090032 app:id/action_context_bar}
    02-16 18:49:49.543    1208-1208/com.wlodsgn.bunbunup D/AndroidRuntime Shutting down VM
    02-16 18:49:49.543    1208-1208/com.wlodsgn.bunbunup W/dalvikvm threadid=1: thread exiting with uncaught exception (group=0xb1a87ba8)
    02-16 18:49:49.573    1208-1208/com.wlodsgn.bunbunup E/AndroidRuntime FATAL EXCEPTION: main
        Process: com.wlodsgn.bunbunup, PID: 1208
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wlodsgn.bunbunup/com.wlodsgn.bunbunup.MenuActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090047 (com.wlodsgn.bunbunup:id/linear) for fragment FmMenu{b1e537f0 #0 id=0x7f090047}
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                at android.app.ActivityThread.access$800(ActivityThread.java:135)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5017)
                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:779)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                at dalvik.system.NativeStart.main(Native Method)
         Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090047 (com.wlodsgn.bunbunup:id/linear) for fragment FmMenu{b1e537f0 #0 id=0x7f090047}
                at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:882)
                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:5240)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                at android.app.ActivityThread.access$800(ActivityThread.java:135)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                at android.os.Handler.dispatchMessage(Handler.java:102)
                at android.os.Looper.loop(Looper.java:136)
                at android.app.ActivityThread.main(ActivityThread.java:5017)
                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:779)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
                at dalvik.system.NativeStart.main(Native Method)

Here is my MenuActivity.java where the error is located (Nearly at the end starts with if (fragment != null) { :

    import java.util.ArrayList;
    import java.util.List;

    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.MenuItemCompat;
    import android.support.v4.view.MenuItemCompat.OnActionExpandListener;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.widget.SearchView;
    import android.support.v7.widget.SearchView.OnQueryTextListener;
    import android.view.LayoutInflater;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    import android.widget.Toast;

    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.content.res.Configuration;
    import android.content.res.TypedArray;
    import android.os.Bundle;
    import android.support.v4.app.ActionBarDrawerToggle;
    import android.support.v4.widget.DrawerLayout;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ListView;

    /**
     * Created by WiLo on 2/13/2015.
     */
    public class MenuActivity extends ActionBarActivity implements OnQueryTextListener, OnActionExpandListener{

        /*private TextView texto;*/

        private DrawerLayout mDrawerLayout;
        private ListView mDrawerList;
        private ActionBarDrawerToggle mDrawerToggle;

        // nav drawer title
        private CharSequence mDrawerTitle;

        // used to store app title
        private CharSequence mTitle;

        // slide menu items
        private String[] navMenuTitles;
        private TypedArray navMenuIcons;

        private ArrayList<NavDrawerItem> navDrawerItems;
        private NavDrawerListAdapter adapter;

        String[] categoria = {
                "Jeans"
        };

        int[] imagenes = {
                R.drawable.veroxjeans1,
                R.drawable.veroxjeans2,
                R.drawable.veroxjeans3,
                R.drawable.veroxjeans4,
                R.drawable.veroxjeans5,
                R.drawable.veroxjeans6,
                R.drawable.veroxjeans7
        };

        SectionsPagerAdapter mSectionsPagerAdapter;
        ViewPager mViewPager;

        @override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_menu);

            /*texto = (TextView) findViewById(R.id.texto);*/

            mTitle = mDrawerTitle = getTitle();

            // load slide menu items
            navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

            // nav drawer icons from resources
            navMenuIcons = getResources()
                    .obtainTypedArray(R.array.nav_drawer_icons);

            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

            navDrawerItems = new ArrayList<NavDrawerItem>();

            // agregar un nuevo item al menu deslizante
            // Menu
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
            // Contacto
            navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
            // Catologo
            //navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1), true, "Estrenos"));
            // old Contacto (Pedidos)
            //navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));

            // Recycle the typed array
            navMenuIcons.recycle();

            mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

            // setting the nav drawer list adapter
            adapter = new NavDrawerListAdapter(getApplicationContext(),
                    navDrawerItems);
            mDrawerList.setAdapter(adapter);

            // enabling action bar app icon and behaving it as toggle button
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);

            mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                    R.drawable.ic_drawer, //nav menu toggle icon
                    R.string.app_name, // nav drawer open - description for accessibility
                    R.string.app_name // nav drawer close - description for accessibility
            ) {
                public void onDrawerClosed(View view) {
                    getSupportActionBar().setTitle(mTitle);
                    // calling onPrepareOptionsMenu() to show action bar icons
                    invalidateOptionsMenu();
                }

                public void onDrawerOpened(View drawerView) {
                    getSupportActionBar().setTitle(mDrawerTitle);
                    // calling onPrepareOptionsMenu() to hide action bar icons
                    invalidateOptionsMenu();
                }
            };
            mDrawerLayout.setDrawerListener(mDrawerToggle);

            if (savedInstanceState == null) {
                // on first time display view for first nav item
                displayView(0);
            }

            //lista
            ListView lista = (ListView) findViewById(R.id.listView1);
            ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, categoria );
            lista.setAdapter(adapter);

            //galeria de imagenes

            mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

            mViewPager = (ViewPager) findViewById(R.id.pager);
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[0]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[1]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[2]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[3]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[4]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[5]));
            mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[6]));

            mViewPager.setAdapter(mSectionsPagerAdapter);

        }

        @override
        public boolean onMenuItemActionExpand(MenuItem menuItem) {
            Toast.makeText(getApplicationContext(), "Abriendo Busqueda", Toast.LENGTH_SHORT).show();
            return true;
        }

        @override
        public boolean onMenuItemActionCollapse(MenuItem menuItem) {
            Toast.makeText(getApplicationContext(), "Cerrando Busqueda", Toast.LENGTH_SHORT).show();
            return true;
        }

        @override
        public boolean onQueryTextSubmit(String s) {
            /*texto.setText("Buscando...\n\n" + s);*/
            return false;
        }

        @override
        public boolean onQueryTextChange(String s) {
            /*texto.setText(" \n\n" + s);*/
            return false;
        }

        /**
         * Slide menu item click listener
         * */
        private class SlideMenuClickListener implements
                ListView.OnItemClickListener {
            [USER=1021285]@override[/USER]
            public void onItemClick(AdapterView<?> parent, View view, int position,
                                    long id) {
                // display view for selected nav drawer item
                displayView(position);
            }
        }

        @override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu, menu);

            MenuItem searchItem = menu.findItem(R.id.menu3_buscar);

            SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
            searchView.setOnQueryTextListener(this);

            MenuItemCompat.setOnActionExpandListener(searchItem, this);

            return super.onCreateOptionsMenu(menu);
        }

        @override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Pass the event to ActionBarDrawerToggle, if it returns
            // true, then it has handled the app icon touch event
            if (mDrawerToggle.onOptionsItemSelected(item)) {
                return true;
            }
            // Handle your other action bar items...

            return super.onOptionsItemSelected(item);
        }

        /**
         * Diplaying fragment view for selected nav drawer list item
         * */
        private void displayView(int position) {
            // update the main content by replacing fragments
            Fragment fragment = null;
            switch (position) {
                case 0:
                    fragment = new FmMenu();
                    break;
                case 1:
                    fragment = new FmContacto();
                    break;

                default:
                    break;
            }

           if (fragment != null) {
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction()
                        .replace(R.id.linear, fragment).commit();

                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);
                setTitle(navMenuTitles[position]);
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                // error in creating fragment
                Log.e("BunBunUp", "MenuActivity - Error cuando se creo el fragment");
            }
        }

        @override
        public void setTitle(CharSequence title) {
            mTitle = title;
            getSupportActionBar().setTitle(mTitle);
        }

        /**
         * When using the ActionBarDrawerToggle, you must call it during
         * onPostCreate() and onConfigurationChanged()...
         */

        @override
        protected void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            // Sync the toggle state after onRestoreInstanceState has occurred.
            mDrawerToggle.syncState();
        }

        @override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);
            // Pass any configuration change to the drawer toggle
            mDrawerToggle.onConfigurationChanged(newConfig);
        }

        public class SectionsPagerAdapter extends FragmentPagerAdapter {

            List<android.support.v4.app.Fragment> fragmentos;
            public SectionsPagerAdapter(android.support.v4.app.FragmentManager fm) {
                super(fm);
                fragmentos = new ArrayList<android.support.v4.app.Fragment>();
            }

            public void addfragments(android.support.v4.app.Fragment xfragment){
                fragmentos.add(xfragment);
            }


            @override
            public android.support.v4.app.Fragment getItem(int position) {
                return fragmentos.get(position);
            }

            @override
            public int getCount() {
                return fragmentos.size();
            }
        }


        public static class PlaceholderFragment extends android.support.v4.app.Fragment {

            private static final String ARG_IMAGE = "imagen";
            private int imagen;

            public static PlaceholderFragment newInstance(int imagen) {
                PlaceholderFragment fragment = new PlaceholderFragment();
                Bundle args = new Bundle();
                args.putInt(ARG_IMAGE, imagen);
                fragment.setArguments(args);
                fragment.setRetainInstance(true);
                return fragment;
            }

            @override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                if(getArguments() != null) {
                    imagen = getArguments().getInt(ARG_IMAGE);
                }
            }

            public PlaceholderFragment() {
            }

            @override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_menu, container, false);

                ImageView imagenView = (ImageView) rootView.findViewById(R.id.imageView1);
                imagenView.setImageResource(imagen);
                return rootView;
            }
        }

    }

Here are the rest (If needed) of the class and xml files that are linked to MenuActivity :

FmMenu.java```
```javascript
    import android.app.Fragment;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    /**
     * Created by WiLo on 2/13/2015.
     */
    public class FmMenu extends Fragment {

        @override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.lay_menufragment, container, false);

            return rootView;
        }
    }
activity_menu.xml```
```javascript    
<?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff0a393d">

        <!-- Linearlayout to display Fragments -->
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:eek:rientation="vertical">

            <android.support.v4.view.ViewPager
                android:id="@+id/pager"
                android:layout_width="match_parent"
                android:layout_height="265dp"
                tools:context=".MenuActivity" />

            <ListView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/listView1"
                android:layout_gravity="center_horizontal" />

        </LinearLayout>

        <!-- Listview to display slider menu -->
        <ListView
            android:id="@+id/list_slidermenu"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@color/list_divider"
            android:dividerHeight="1dp"
            android:listSelector="@drawable/list_selector"
            android:background="@color/list_background"/>
    </android.support.v4.widget.DrawerLayout>
fragment_menu.xml```
```javascript
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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=".MenuActivity$PlaceholderFragment"
        android:id="@+id/linear">

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:id="@+id/imageView1"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
lay_menufragment.xml```
```javascript
    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:eek:rientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">

    </LinearLayout>

Need more info, let me know

Any help would be appreciated!

8 Answers

Harry James
Harry James
14,780 Points

Hey Wilfredo and welcome to Treehouse! It's great to see you ;)

It looks like there's an issue with the R class. This class shouldn't be edited by hand so, instead we can force a rebuild of the class.


First of all, try cleaning the project. To do this, go to the Build tab and press Clean Project. This process will take a moment!


If that doesn't fix the issue, it's then time to delete the R class (Not to worry! The class is simply rebuilt again!). The R class can be found at app >> build >> source >> r >> debug >> com.your.packagename >> R.java. Go ahead and press Delete on this and run your app again.


If neither of these fix the issue, get back to me and I'll see if anything else can be done :)

Harry James
Harry James
14,780 Points

As long as you've got the code for that, everything's ok!

It's up to you how you want to organise it though. If I was you, I would move the code relating to the adapter itself into a separate class but, it won't make any difference to your code. If you're the only person working on this project, perhaps it's easier for you just to have it all in one class.

Moving the code to a different class won't affect performance, it's only for organisational purposes so, you decide where you think it should go :)

Hi Harry,

Thanks for the reply! I was able to find an alternative solution by replacing linear to container and adding android:id="@+id/container to the LinearLayout of my activity_menu.xml.

Although its good to learn new stuff like doing a cleanup and rebuilding R.java which I didn't know about it. One thing I would ask, is it ok to do those procedures just to have a cleaner project or is it better to mess with it when there is only an issue that requires those type of procedures.

Once again. thanks for your help!

Harry James
Harry James
14,780 Points

Glad to hear you got it fixed Wilfredo!

There's no harm in doing any of this however, it doesn't actually create a "cleaner project". Instead, it just clears the cached files and rebuilds them again. There's different levels in the Build tab like Rebuild project which regenerates a few of the files but not as much as Clean Project does (However, rebuilding is faster).

Developers don't usually use these tools unless something goes wrong and you know you've fixed the problem (For example, a missing closing brace even though you just added one).

Hope it helps! :)

Good to know that. Thanks for that explanation!

Although, I have another concern that has been bugging me lately. Its slightly off topic from what we were discussing but related to this project. I am in a situation in which I need an orientation because I don't know if I am in the right or wrong track with the planning of this project. Let me give you some details...

So, the planning of this project consists of:

An IntroActivity.java: This activity (does not have an action bar) is the first page that the user will encounter when they enter the app. From there, they will be able to press a button and enter to the next activity which is MenuActivity.java. This activity has a Navigation Drawer (which it is controlled NavDrawerItem.java, NavDrawerListAdapter.java, counter_bg.xml, list_item_bg_normal.xml, list_item_bg_pressed.xml, list_selector.xml, drawer_list_item.xml, and partly controlled by activity_menu.xml) and inside of it, it has a Menu fragment (That is controlled by MenuActivity after you enter from IntroActivity) and a Contact fragment (Doesn't have a java class nor xml yet) that I want to open directly from the Navigation Drawer and go back and forth to MenuActivity from there. The action bar has a search box (which is not working yet nor connected to a database). Inside MenuActivity.java `s layout body, it has a ViewPager on the top part that and a ListView in the bottom part (each of them are controlled by partly by activity_menu.xml). The ListView will contain 1 or more categories to enter another ListView from a different java class that will be controlled by a remote database.

Now, the concern that I have is that I can't be sure if this is the right way. I mean, does the MenuActivity can go together with all the main codes and layouts that I mentioned above or should I create a new java class that is named MainActivity.java and include only Navigation Drawer and the ActionBar with the Search box and leave the remaining codes of MenuActivity (PageView, ListView, and the upcoming Contact.java) in it.

Any guidance would be greatly helpful :D

Here is a screenshot of the folders and files of my project Project Info

Harry James
Harry James
14,780 Points

I've moved this into an flowchart here:

Click here for high resolution for smaller displays

Hopefully this is right (If not, give me a shout).

Everything looks good to me here apart from the fragments bit. How are you adapting your fragments for your ViewPager? Are you doing this in one of your classes like MenuActivity.java or have you just not got onto that yet?

Yes, ViewPager and ListView are both in MenuActivity.java, activity_menu.xml, and fragment_menu.xml.

Here are the code snippet for each one respectively:

MenuActivity.java

import java.util.ArrayList;
import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;

String[] categoria = {
            "Jeans"
    };

    int[] imagenes = {
            R.drawable.veroxjeans1,
            R.drawable.veroxjeans2,
            R.drawable.veroxjeans3,
            R.drawable.veroxjeans4,
            R.drawable.veroxjeans5,
            R.drawable.veroxjeans6,
            R.drawable.veroxjeans7
    };

    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;

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

//lista
        ListView lista = (ListView) findViewById(R.id.listView1);
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, categoria );
        lista.setAdapter(adapter);

        //galeria de imagenes

        mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[0]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[1]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[2]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[3]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[4]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[5]));
        mSectionsPagerAdapter.addfragments(PlaceholderFragment.newInstance(imagenes[6]));

        mViewPager.setAdapter(mSectionsPagerAdapter);

    }

activity.xml

<!-- Linearlayout to display Fragments -->
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:id="@+id/container">

        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="265dp"
            tools:context=".MenuActivity" />

        <ListView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/listView1"
            android:layout_gravity="center_horizontal" />

    </LinearLayout>

fragment_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".MenuActivity$PlaceholderFragment"
    android:id="@+id/linear">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView1"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />
</RelativeLayout>

Actually, what I tried to do a couple of days ago was try to get PageView and ListView code and layout, and set it up in FmMenu.java and lay_menufragment.xml but it didn't work. FmMenu.java extends as a Fragment so I tried to modify it and change it to ActionBarActivity or find any type of implementation that may work under Fragment extension but no success. Is there any other way to do it?

By the way, this is whats inside in both files:

FmMenu.java

package com.wlodsgn.bunbunup;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * Created by WiLo
 */
public class FmMenu extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.lay_menufragment, container, false);

        return rootView;
    }
}

lay_menufragment.xml

<?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">

</LinearLayout>
Harry James
Harry James
14,780 Points

Hmm...

You can use

extends FragmentActivity implements
        ActionBar.TabListener

but it seems as though ActionBar.TabListener is deprecated now. Upon reading about this, I'm just brought to this page which doesn't actually specify a new way to do this...

You can use that for now but I'll investigate to see if there's anything else that can be done.

Thanks!

I'll give it a try later

Appreciate your help with this :)

Hey Harry,

Could you please help me with this

Have been stumbling through several errors to get my Introactivity.java to go to FmMenu.java but have stumbled with this Fatal Exception and I don't know where to go from it. Its related to the same project we had talked here in this thread. Hope you can help me out.

Thanks!