2015-07-14 7 views
-1

Я получаю странную ошибку в файле AndroidManifest.xml с сообщением «MainActivity не является общедоступным. Проверьте ссылку на ресурсы в файлах Android XML». Не знаю, как решить эту ошибку. Может ли кто-нибудь помочь мне здесь?MainActivity не является общедоступным

AndroidManifest.xml

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

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > 
    </uses-permission> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      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=".What_is_java" 
      android:label="@string/title_activity_what_is_java" > 
     </activity> 
    </application> 

</manifest> 

MainActivity.java

package com.pixalstudio.javaclasses; 

import android.content.Intent; 
import android.content.res.Configuration; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.Toolbar; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 


class MainActivity extends ActionBarActivity implements AdapterView.OnItemClickListener { 

    private Toolbar toolbar; 
    ListView mDrawerList; 
    DrawerLayout mDrawerLayout; 
    ActionBarDrawerToggle mDrawerToggle; 
    String[] mDrawerListItems; 
    String[] mDrawerListItems2; 

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

     ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE); 
     NetworkInfo nInfo = cManager.getActiveNetworkInfo(); 
     if (nInfo != null && nInfo.isConnected()) { 
      Toast.makeText(this, "Newtwrok Available", Toast.LENGTH_LONG).show(); 
     } else { 
      Toast.makeText(this, "Network Not Available", Toast.LENGTH_LONG).show(); 
     } 


     toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 
     LayoutInflater inflater = getLayoutInflater(); 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 
     mDrawerList = (ListView) findViewById(R.id.drawerList); 
     mDrawerListItems = getResources().getStringArray(R.array.drawer_list); 

     ViewGroup header_news = (ViewGroup) inflater.inflate(R.layout.nav_header, mDrawerList, false); 
     mDrawerList.addHeaderView(header_news, null, false); 


     mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDrawerListItems)); 
     mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       if (position == 1) { 
        Intent i = new Intent(MainActivity.this, What_is_java.class); 
        startActivity(i); 
       } 
       mDrawerLayout.closeDrawer(mDrawerList); 
      } 

     }); 


     mDrawerToggle = new ActionBarDrawerToggle(this, 
       mDrawerLayout, 
       toolbar, 
       R.string.drawer_open, 
       R.string.drawer_close) { 
      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       invalidateOptionsMenu(); 
       syncState(); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       invalidateOptionsMenu(); 
       syncState(); 
      } 
     }; 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.syncState(); 
    } 

    @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) { 

     switch (item.getItemId()) { 
      case android.R.id.home: { 
       if (mDrawerLayout.isDrawerOpen(mDrawerList)) { 
        mDrawerLayout.closeDrawer(mDrawerList); 
       } else { 
        mDrawerLayout.openDrawer(mDrawerList); 
       } 
       return true; 
      } 
      default: 
       return super.onOptionsItemSelected(item); 
     } 


    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     if (position == 2) { 
      Intent i = new Intent(this, What_is_java.class); 
      startActivity(i); 
     } 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } 
} 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include 
     android:id="@+id/app_bar" 
     layout="@layout/app_bar"> 

    </include> 


    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawerLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     </FrameLayout> 


     <ListView 
      android:id="@+id/drawerList" 
      android:layout_width="240dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      android:background="#CE93D8"> 

     </ListView> 


    </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 
+2

Как говорится в ошибке, ваша деятельность не является общедоступной. Измените его на 'public class MainActivity'. –

ответ

2

Изменение class MainActivity [...] к public class MainActivity [...] в MainActivity.java

+0

большой ... это решило проблему. – akkie4396

+0

У меня есть другой вопрос. Что делать, если я хочу сделать этот навигационный ящик доступным для всех действий в приложении? Есть идеи? – akkie4396

+0

@ akkie4396 Вместо создания нескольких действий вы можете использовать 'Fragment' все, происходящие из вашей' MainActivity', таким образом, 'NavigationDrawer' сохраняется, без необходимости его создания снова и т. Д. Или вы можете просто скопировать, вставьте свой код активности в другое действие и работайте оттуда. Первый вариант, используя «Фрагмент», может быть более чистым. –

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