2014-04-03 2 views
0

단순히 webview 및 mDrawer 슬라이드 메뉴를 사용하여 앱을 빌드했습니다. 그러나 그것이> 3 android에서 작동하지 않는 것을보고 난 후에 지원 라이브러리를 추가하고 약간의 변경을가했지만 여전히 작동하지 않습니다. 는 여기에 내가 getSupportActionBar에 getActionBar를()() 변경을 시도mDrawer FragmentActivity가 3 이상에서 작동하지 않습니다.

import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentManager.OnBackStackChangedListener; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarActivity; 
import android.view.KeyEvent; 

import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 

import android.view.View.OnKeyListener; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

@SuppressLint("NewApi") 
public class MainActivity extends ActionBarActivity { 

    private LayoutInflater mInflater; 
    private DrawerLayout mDrawerLayout; 
    WebView browser; 
    // ListView represents Navigation Drawer 
    private ListView mDrawerList; 

    // ActionBarDrawerToggle indicates the presence of Navigation Drawer in the action bar 
    private ActionBarDrawerToggle mDrawerToggle; 
    private String mTitle = ""; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     WebView browser = (WebView) findViewById(R.id.webView1); 
     browser.loadUrl(""); 
     browser.setWebViewClient(new WebViewClient()); 
     WebSettings webSettings = browser.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 

     mInflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 


     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     mDrawerList = (ListView) findViewById(R.id.drawer_list); 

     // Getting reference to the ActionBarDrawerToggle 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
         R.drawable.ic_drawer, R.string.drawer_open, 
         R.string.drawer_close) { 

       /** Called when drawer is closed */ 
       public void onDrawerClosed(View view) { 
        getSupportActionBar().setTitle(mTitle); 

         invalidateOptionsMenu(); 

       } 

       /** Called when a drawer is opened */ 
       public void onDrawerOpened(View drawerView) { 
        getSupportActionBar().setTitle("Menu"); 

         invalidateOptionsMenu(); 
       } 


     }; 
     browser.setOnKeyListener(new OnKeyListener() 
     { 
      public boolean onKey(View v, int keyCode, KeyEvent event) 
      { 
       if(event.getAction() == KeyEvent.ACTION_DOWN) 
       { 
        WebView webView = (WebView) v; 

        switch(keyCode) 
        { 
         case KeyEvent.KEYCODE_BACK: 
          if(webView.canGoBack()) 
          { 
           webView.goBack(); 
           return true; 
          } 
          break; 
        } 
       } 

       return false; 
      } 
     }); 

     // Setting DrawerToggle on DrawerLayout 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     // Creating an ArrayAdapter to add items to the listview mDrawerList 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), 
         R.layout.drawer_list_item, getResources().getStringArray(R.array.menus)); 

     // Setting the adapter on mDrawerList 
     mDrawerList.setAdapter(adapter); 

     // Enabling Home button 
     getSupportActionBar().setHomeButtonEnabled(true); 

     // Enabling Up navigation 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // Setting item click listener for the listview mDrawerList 
     mDrawerList.setOnItemClickListener(new OnItemClickListener() { 

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

         // Getting an array of rivers 
         String[] menuItems = getResources().getStringArray(R.array.menus); 

         // Currently selected river 
         mTitle = menuItems[position]; 

         // Creating a fragment object 


         // Passing selected item information to fragment 
         Bundle data = new Bundle(); 
         data.putInt("position", position); 
         data.putString("url", getUrl(position)); 



         // Getting reference to the FragmentManager 
         FragmentManager fragmentManager = getSupportFragmentManager(); 

         fragmentManager.addOnBackStackChangedListener(new OnBackStackChangedListener() { 
          public void onBackStackChanged() { 
           if(getSupportFragmentManager().getBackStackEntryCount() == 0)  
            finish();                
          } 
         }); 

         // Creating a fragment transaction 
         FragmentTransaction ft = fragmentManager.beginTransaction(); 

         // Adding a fragment to the fragment transaction 


         // Committing the transaction 
         ft.commit(); 

         // Closing the drawer 
         mDrawerLayout.closeDrawer(mDrawerList); 

       } 
     });  




} 

코드입니다하지만 난 다음 오류가있어 : 방법 getSupportActionBar는() 형식의 새로운 ActionBarDrawerToggle() {}

에 대한 정의되지 을

로그 캣 :

04-03 14 : 39 : 29.237 : E/AndroidRuntime (687) FATAL EXCEPTION : 메인

04-03 14 : 39 : 29.237 : E/AndroidRuntime (687) 인 java.lang .RuntimeException : 인스턴스화할 수 없습니다. 전자 액티비티 ComponentInfo {com.example.com/com.example.com.MainActivity} : java.lang.ClassNotFoundException : com.example.com.MainActivity in loader dalvik.system.PathClassLoader [/data/app/com.example.com] 당신이 지원 라이브러리를 사용하여 액션 바을 사용하려면 -2.apk]

매니페스트

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.com" 
android:versionCode="1" 
android:versionName="1.0" > 
<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="18" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.com.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> 
    </application> 

    </manifest> 
+1

가 로그 캣을 게시하시기 바랍니다 자세한 내용에 대한 look here을 가지고, 당신이 게시 코드는 – nikis

+0

무엇 최소 SDK 버전이 지원하려고하는 것 유효한 것 같다? – nikis

+0

Min sdk가 8 ... –

답변

0

, 당신은 MainActivity 대신 FragmentActivity의 ActionBarActivity을 확장해야한다. 개발자에서 촬영 안내 :

When using the support library, you can add the action bar to the top of your activity window by extending the ActionBarActivity class and setting the activity theme to Theme.AppCompat or a similar theme.

을 그런 다음() 대신 getActionBar의 작업 표시 줄을 얻을 수 getSupportActionBar()를 사용합니다;

+0

입니다. 틀린 분,'FragmentActivity' 소스 코드를 보시면이 클래스는'getActionBar()'메소드가있는'android.app.Activity'를 확장합니다. – nikis

+0

그래,이 말을 작동시킬 수 없다. logcat : –

+0

Nikis, 오래된 장치 (android 2.x)를 지원하려면 getSupportActionBar()를 사용해야한다. – FMontano

관련 문제