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

匿名 (未验证) 提交于 2019-12-03 01:19:01

问题:

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

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

Here is the error log:

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 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();          // 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 {         @Override         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 fragmentos;         public SectionsPagerAdapter(android.support.v4.app.FragmentManager fm) {             super(fm);             fragmentos = new ArrayList();         }          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 files that are linked to MenuActivity :

FmMenu.java

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

fragment_menu.xml

lay_menufragment.xml

New error log:

02-17 09:41:20.480      917-917/com.wlodsgn.bunbunup W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb1ad9ba8) 02-17 09:41:20.560      917-917/com.wlodsgn.bunbunup E/AndroidRuntime: FATAL EXCEPTION: main     Process: com.wlodsgn.bunbunup, PID: 917     java.lang.OutOfMemoryError             at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)             at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:587)             at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:422)             at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)             at android.content.res.Resources.loadDrawable(Resources.java:2110)             at android.content.res.Resources.getDrawable(Resources.java:700)             at android.widget.ImageView.resolveUri(ImageView.java:638)             at android.widget.ImageView.setImageResource(ImageView.java:367)             at com.wlodsgn.bunbunup.MenuActivity$PlaceholderFragment.onCreateView(MenuActivity.java:345)             at android.support.v4.app.Fragment.performCreateView(Fragment.java:1786)             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)             at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)             at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)             at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:486)             at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)             at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)             at android.support.v4.view.ViewPager.populate(ViewPager.java:919)             at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)             at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)             at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)             at android.view.View.measure(View.java:16497)             at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)             at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)             at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)             at android.view.View.measure(View.java:16497)             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)             at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)             at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)             at android.view.View.measure(View.java:16497)             at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)             at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)             at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)             at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)             at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)             at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)             at android.view.Choreographer.doCallbacks(Choreographer.java:574)             at android.view.Choreographer.doFrame(Choreographer.java:544)             at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)             at android.os.Handler.handleCallback(Handler.java:733)             at android.os.Handler.dispatchMessage(Handler.java:95)             at android.os.Looper.loop(Looper.java:136) 

Need more info, let me know

Any help would be appreciated

回答1:

I think I have found something.

fragmentManager.beginTransaction()                 .replace(R.id.linear, fragment).commit(); 

As you see you try to replace the layout R.id.linear with your fragment. But the R.id.linear is the RelativeLayout you use in your fragment_menu.xml. You should replace the layout in your activity_menu.xml with the current fragment. So I would suggest:

fragmentManager.beginTransaction().replace(R.id.container, fragment).commit(); 

And in your activity_menu.xml:

EDIT:

For the new error: There is a problem with your memory. This often happens when ImageViews are filled by big ressources. So there is only one position where you use an ImageView:

 @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;         } 

As you see, your imagenView is filled by the resource imagen

imagenView.setImageResource(imagen); 

Probably you get the OutOfMemoryError there. As a solution, try this:

try {     imagenView.setImageResource(imagen); } catch (OutOfMemoryError e) {     //fill your ImageView with something smaller .. maybe a smaller resolution     Log.e("PlaceholderFragment", "Error: OutOfMemoryError") } 

Check your imagen too, whether there is a high resolution needed.



回答2:

OutOfMemory, you could try to use Glide dependency, to load a resource / an image :)

Reference:

https://github.com/bumptech/glide -> Add dependency

https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en -> Tutorial to use it!



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!