-4
This is my sarting activity...  

    public class first extends ActionBarActivity { 

    public String superusername=null; 

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

     Button okbtn = (Button) findViewById(R.id.okbtn); 
     final EditText username = (EditText) findViewById(R.id.username); 

     okbtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       superusername = username.getText().toString(); 
       Intent intent = new Intent(first.this, MainActivity.class); 
       startActivity(intent); 

      } 
     }); 

    } 

Когда я нажимаю кнопку ok, приложение вылетает. Зачем???Приложение сбой при запуске функции navigationDrawer из пустой активности

Как я могу успешно начать работу NavigationDrawer ???

Это мой файл манифеста ...

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.susk.swayam.ABC" > 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/icon" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light.NoActionBar" > 
     <activity 
      android:name=".first" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main" > 
      <intent-filter> 
       <action android:name="android.intent.action.FIRST" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

Это log.error ....

05-21 15:46:15.098 1009-1009/com.susk.swayam.timecaller E/Trace﹕ error opening trace file: No such file or directory (2) 
05-21 15:46:20.087 1009-1009/com.susk.swayam.timecaller E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.susk.swayam.timecaller/com.susk.swayam.timecaller.MainActivity}: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
      at android.app.ActivityThread.access$600(ActivityThread.java:130) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
      at com.susk.swayam.timecaller.MainActivity.onCreate(MainActivity.java:38) 
      at android.app.Activity.performCreate(Activity.java:5008) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
      at android.app.ActivityThread.access$600(ActivityThread.java:130) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.susk.swayam.timecaller.NavigationDrawerFragment.onCreateView(NavigationDrawerFragment.java:100) 
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:924) 
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1116) 
      at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1218) 
      at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2170) 
      at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:300) 
      at android.support.v7.app.AppCompatDelegateImplV7.callActivityOnCreateView(AppCompatDelegateImplV7.java:816) 
      at android.support.v7.app.AppCompatDelegateImplV11.callActivityOnCreateView(AppCompatDelegateImplV11.java:72) 
      at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:804) 
      at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:675) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
      at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249) 
      at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 
      at com.susk.swayam.timecaller.MainActivity.onCreate(MainActivity.java:38) 
      at android.app.Activity.performCreate(Activity.java:5008) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
      at android.app.ActivityThread.access$600(ActivityThread.java:130) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at `enter code here`com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 

Когда я нажимаю ОК аварий кнопку приложения.

первая активность вызывает MainActivity, которая является объектом NavigationDrawerFragment.

+0

Отправьте свой Logcat, пожалуйста. – EarlOfEgo

+0

Положите logcat для получения ошибок. – Shvet

+1

Навигационный фрагмент фрагмента или активность? Если это активность, вы не добавили ее в файл манифеста. –

ответ

0

1) Вы должны поставить LogCat или невозможно найти проблему и помочь вам

2) NavDrawer не может быть фрагментом. Это действие, в котором вы будете называть ваши фрагменты.

Вот хороший пример: http://www.android4devs.com/2014/12/how-to-make-material-design-navigation-drawer.html

Как вы можете видеть, что вам нужно создать активность, которая проходит ActionBarActivity

public class MainActivity extends ActionBarActivity { 

    //First We Declare Titles And Icons For Our Navigation Drawer List View 
    //This Icons And Titles Are holded in an Array as you can see 

    String TITLES[] = {"Home","Events","Mail","Shop","Travel"}; 
    int ICONS[] = {R.drawable.ic_home,R.drawable.ic_events,R.drawable.ic_mail,R.drawable.ic_shop,R.drawable.ic_travel}; 

    //Similarly we Create a String Resource for the name and email in the header view 
    //And we also create a int resource for profile picture in the header view 

    String NAME = "Akash Bangad"; 
    String EMAIL = "[email protected]"; 
    int PROFILE = R.drawable.aka; 

    private Toolbar toolbar;        // Declaring the Toolbar Object 

    RecyclerView mRecyclerView;       // Declaring RecyclerView 
    RecyclerView.Adapter mAdapter;      // Declaring Adapter For Recycler View 
    RecyclerView.LayoutManager mLayoutManager;   // Declaring Layout Manager as a linear layout manager 
    DrawerLayout Drawer;         // Declaring DrawerLayout 

    ActionBarDrawerToggle mDrawerToggle;     // Declaring Action Bar Drawer Toggle 




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

    /* Assinging the toolbar object ot the view 
    and setting the the Action bar to our toolbar 
    */ 
    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    setSupportActionBar(toolbar); 




     mRecyclerView = (RecyclerView) findViewById(R.id.RecyclerView); // Assigning the RecyclerView Object to the xml View 

     mRecyclerView.setHasFixedSize(true);       // Letting the system know that the list objects are of fixed size 

     mAdapter = new MyAdapter(TITLES,ICONS,NAME,EMAIL,PROFILE);  // Creating the Adapter of MyAdapter class(which we are going to see in a bit) 
                     // And passing the titles,icons,header view name, header view email, 
                     // and header view profile picture 

     mRecyclerView.setAdapter(mAdapter);        // Setting the adapter to RecyclerView 

     mLayoutManager = new LinearLayoutManager(this);     // Creating a layout Manager 

     mRecyclerView.setLayoutManager(mLayoutManager);     // Setting the layout Manager 


     Drawer = (DrawerLayout) findViewById(R.id.DrawerLayout);  // Drawer object Assigned to the view 
     mDrawerToggle = new ActionBarDrawerToggle(this,Drawer,toolbar,R.string.openDrawer,R.string.closeDrawer){ 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       // code here will execute once the drawer is opened(As I dont want anything happened whe drawer is 
       // open I am not going to put anything here) 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       // Code here will execute once drawer is closed 
      } 



    }; // Drawer Toggle Object Made 
     Drawer.setDrawerListener(mDrawerToggle); // Drawer Listener set to the Drawer toggle 
     mDrawerToggle.syncState();    // Finally we set the drawer toggle sync State 

    } 


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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Затем создайте адаптер:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private static final int TYPE_HEADER = 0; // Declaring Variable to Understand which View is being worked on 
               // IF the view under inflation and population is header or Item 
    private static final int TYPE_ITEM = 1; 

    private String mNavTitles[]; // String Array to store the passed titles Value from MainActivity.java 
    private int mIcons[];  // Int Array to store the passed icons resource value from MainActivity.java 

    private String name;  //String Resource for header View Name 
    private int profile;  //int Resource for header view profile picture 
    private String email;  //String Resource for header view email 


    // Creating a ViewHolder which extends the RecyclerView View Holder 
    // ViewHolder are used to to store the inflated views in order to recycle them 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     int Holderid;  

     TextView textView; 
     ImageView imageView; 
     ImageView profile; 
     TextView Name; 
     TextView email; 


     public ViewHolder(View itemView,int ViewType) {     // Creating ViewHolder Constructor with View and viewType As a parameter 
      super(itemView); 


      // Here we set the appropriate view in accordance with the the view type as passed when the holder object is created 

      if(ViewType == TYPE_ITEM) { 
       textView = (TextView) itemView.findViewById(R.id.rowText); // Creating TextView object with the id of textView from item_row.xml 
       imageView = (ImageView) itemView.findViewById(R.id.rowIcon);// Creating ImageView object with the id of ImageView from item_row.xml 
       Holderid = 1;            // setting holder id as 1 as the object being populated are of type item row 
      } 
      else{ 


       Name = (TextView) itemView.findViewById(R.id.name);   // Creating Text View object from header.xml for name 
       email = (TextView) itemView.findViewById(R.id.email);  // Creating Text View object from header.xml for email 
       profile = (ImageView) itemView.findViewById(R.id.circleView);// Creating Image view object from header.xml for profile pic 
       Holderid = 0;            // Setting holder id = 0 as the object being populated are of type header view 
      } 
     } 


    } 



    MyAdapter(String Titles[],int Icons[],String Name,String Email, int Profile){ // MyAdapter Constructor with titles and icons parameter 
              // titles, icons, name, email, profile pic are passed from the main activity as we 
     mNavTitles = Titles;    //have seen earlier 
     mIcons = Icons; 
     name = Name; 
     email = Email; 
     profile = Profile;      //here we assign those passed values to the values we declared here 
     //in adapter 



    } 



    //Below first we ovverride the method onCreateViewHolder which is called when the ViewHolder is 
    //Created, In this method we inflate the item_row.xml layout if the viewType is Type_ITEM or else we inflate header.xml 
    // if the viewType is TYPE_HEADER 
    // and pass it to the view holder 

    @Override 
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     if (viewType == TYPE_ITEM) { 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row,parent,false); //Inflating the layout 

      ViewHolder vhItem = new ViewHolder(v,viewType); //Creating ViewHolder and passing the object of type view 

      return vhItem; // Returning the created object 

      //inflate your layout and pass it to view holder 

     } else if (viewType == TYPE_HEADER) { 

      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.header,parent,false); //Inflating the layout 

      ViewHolder vhHeader = new ViewHolder(v,viewType); //Creating ViewHolder and passing the object of type view 

      return vhHeader; //returning the object created 


     } 
     return null; 

    } 

    //Next we override a method which is called when the item in a row is needed to be displayed, here the int position 
    // Tells us item at which position is being constructed to be displayed and the holder id of the holder object tell us 
    // which view type is being created 1 for item row 
    @Override 
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) { 
     if(holder.Holderid ==1) {        // as the list view is going to be called after the header view so we decrement the 
                   // position by 1 and pass it to the holder while setting the text and image 
      holder.textView.setText(mNavTitles[position - 1]); // Setting the Text with the array of our Titles 
      holder.imageView.setImageResource(mIcons[position -1]);// Settimg the image with array of our icons 
     } 
     else{ 

      holder.profile.setImageResource(profile);   // Similarly we set the resources for header view 
      holder.Name.setText(name); 
      holder.email.setText(email); 
     } 
    } 

    // This method returns the number of items present in the list 
    @Override 
    public int getItemCount() { 
     return mNavTitles.length+1; // the number of items in the list will be +1 the titles including the header view. 
    } 


    // Witht the following method we check what type of view is being passed 
    @Override 
    public int getItemViewType(int position) { 
     if (isPositionHeader(position)) 
      return TYPE_HEADER; 

     return TYPE_ITEM; 
    } 

    private boolean isPositionHeader(int position) { 
     return position == 0; 
    } 

} 

Этот вид примера отлично, потому что он использует новые компоненты дизайна материалов, включая Toolbar Надеюсь, это поможет

Смежные вопросы