2014-04-03 73 views
0

我用簡單的webview和mDrawer滑動菜單構建了一個應用程序。但看到後,它不工作> 3 Android我已經添加了支持庫,並做了一些更改,但它仍然無法正常工作。 這裏是代碼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); 

       } 
     });  




} 

我曾試圖改變getActionBar()來getSupportActionBar(),但我得到了一個錯誤: 方法getSupportActionBar()是未定義的類型新ActionBarDrawerToggle(){}

logcat的:

04-03 14:39:29.237:E/AndroidRuntime(687):致命異常:主

04-03 14:39:29.237:E/AndroidRuntime(687):java.lang中.RuntimeException:無法實例化e活動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

請張貼logcat中,您發佈的代碼似乎有效 – nikis

+0

什麼是你要去的最低SDK版本支持? – nikis

+0

Min sdk是8 ... –

回答

0

如果你想使用支持庫使用的動作條,你應該讓MainActivity擴展ActionBarActivity代替FragmentActivity。從開發商採取指導:

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.

然後,你可以使用getSupportActionBar()來獲得操作欄,而不是getActionBar();

乘坐look here更多細節

+0

你錯了,看看'FragmentActivity'源代碼,這個類擴展了'android.app.Activity',它有'getActionBar()'方法。 – nikis

+0

是啊不能工作這個說logcat看看: –

+0

Nikis,如果你想支持舊設備(android 2.x),你需要使用getSupportActionBar()。 – FMontano