2015-05-01 111 views
58

我第一次安裝(Android Studio 1.2 + SDK包),我創建了一個帶有演示選項卡活動的測試項目。我沒有寫出一行代碼,所有內容都是由Android Studio生成的android.support.v7.internal.widget.ActionBarOverlayLayout無法實例化

在fragment_main.xml中會出現以下問題。

enter image description here

java.lang.ClassNotFoundException: android.support.v4.view.ViewPropertyAnimatorListener 
    at org.jetbrains.android.uipreview.ModuleClassLoader.load(ModuleClassLoader.java:127) 
    at com.android.tools.idea.rendering.RenderClassLoader.findClass(RenderClassLoader.java:53) 
    at org.jetbrains.android.uipreview.ModuleClassLoader.findClass(ModuleClassLoader.java:84) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    at java.lang.Class.getDeclaredConstructors0(Native Method) 
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2585) 
    at java.lang.Class.getConstructor0(Class.java:2885) 
    at java.lang.Class.getConstructor(Class.java:1723) 
    at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:348) 
    at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105) 
    at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:177) 
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:214) 
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:142) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at com.android.layoutlib.bridge.bars.BridgeActionBar.<init>(BridgeActionBar.java:84) 
    at com.android.layoutlib.bridge.bars.AppCompatActionBar.<init>(AppCompatActionBar.java:56) 
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.createActionBar(RenderSessionImpl.java:1691) 
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:362) 
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321) 
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) 
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:497) 
    at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:485) 
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:894) 
    at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:485) 
    at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:590) 
    at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480) 
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) 
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) 
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:351) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity$PlaceholderFragment"> 

    <TextView android:id="@+id/section_label" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

活動(這裏沒有代碼錯誤,但我很驚訝地看到一個演示代碼的廢棄的函數調用):

import java.util.Locale; 

import android.support.v7.app.ActionBarActivity; 
import android.support.v7.app.ActionBar; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 


public class MainActivity extends ActionBarActivity implements ActionBar.TabListener { 

    /** 
    * The {@link android.support.v4.view.PagerAdapter} that will provide 
    * fragments for each of the sections. We use a 
    * {@link FragmentPagerAdapter} derivative, which will keep every 
    * loaded fragment in memory. If this becomes too memory intensive, it 
    * may be best to switch to a 
    * {@link android.support.v4.app.FragmentStatePagerAdapter}. 
    */ 
    SectionsPagerAdapter mSectionsPagerAdapter; 

    /** 
    * The {@link ViewPager} that will host the section contents. 
    */ 
    ViewPager mViewPager; 

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

     // Set up the action bar. 
     final ActionBar actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     // When swiping between different sections, select the corresponding 
     // tab. We can also use ActionBar.Tab#select() to do this if we have 
     // a reference to the Tab. 
     mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }); 

     // For each of the sections in the app, add a tab to the action bar. 
     for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      // Create a tab with text corresponding to the page title defined by 
      // the adapter. Also specify this Activity object, which implements 
      // the TabListener interface, as the callback (listener) for when 
      // this tab is selected. 
      actionBar.addTab(
        actionBar.newTab() 
          .setText(mSectionsPagerAdapter.getPageTitle(i)) 
          .setTabListener(this)); 
     } 
    } 


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

    @Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
     // When the given tab is selected, switch to the corresponding page in 
     // the ViewPager. 
     mViewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    } 

    /** 
    * A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
    * one of the sections/tabs/pages. 
    */ 
    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 
      return PlaceholderFragment.newInstance(position + 1); 
     } 

     @Override 
     public int getCount() { 
      // Show 3 total pages. 
      return 3; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      Locale l = Locale.getDefault(); 
      switch (position) { 
       case 0: 
        return getString(R.string.title_section1).toUpperCase(l); 
       case 1: 
        return getString(R.string.title_section2).toUpperCase(l); 
       case 2: 
        return getString(R.string.title_section3).toUpperCase(l); 
      } 
      return null; 
     } 
    } 

    /** 
    * A placeholder fragment containing a simple view. 
    */ 
    public static class PlaceholderFragment extends Fragment { 
     /** 
     * The fragment argument representing the section number for this 
     * fragment. 
     */ 
     private static final String ARG_SECTION_NUMBER = "section_number"; 

     /** 
     * Returns a new instance of this fragment for the given section 
     * number. 
     */ 
     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      return rootView; 
     } 
    } 

} 
+0

如果您剛剛安裝了SDK,那麼它可能沒有正確加載,請嘗試重新啓動您的工作室。 – Apurva

+0

我重新啓動並仍然收到相同的錯誤 – user3782779

回答

196

有完全相同的問題。我被改變res/values/styles.xml擺脫它

<!-- Base application theme. --> 
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
</style> 

+18

謝謝!我將「Theme.AppCompat.Light.DarkActionBar」更改爲「Base.Theme.AppCompat.Light.DarkActionBar」。所以「基地」。丟失... – Blankarsch

+6

任何想法爲什麼在Android Studio 1.2中出現這樣一個簡單明顯的錯誤? 從字面上剛剛安裝了JDK和Android Studio 1.2,「新建項目」,並做出了一個空白的空白活動,它向我展示了OP的ClassNotFoundException for ViewPropertyAnimatorListener。任何簡單的方法來編輯默認值,以便他們不這樣做? –

+1

感謝工作像一個魅力 – Naveed

7

我有同樣的問題,我認爲這是渲染AppCompatTheme時的問題。

啓用預覽再次切換到股票的主題,如「材質輕」 /「Material.Light.DarkActionBarTheme」

0

我從一個全新的項目,由Android 1.2工作室創建了這個錯誤。

@弗洛朗的解決方案爲我工作:

開關的股票主題,如 「材質輕」/ 「Material.Light.DarkActionBarTheme」

改變了這一建項目,和渲染開始工作。

17

Android的工具Project,該網站列出了該作爲Android的搖籃插件的1.2版中的已知的bug,並宣佈將通過版本1.2.3固定

參見: http://tools.android.com/knownissues

他們提出3解決方法:

引用上面的鏈接:

解決方法1:首先手動生成項目,然後手動同步噸他 項目(使用工具欄中的同步與Gradle文件,或從 工具> Android菜單),然後最後按佈局編輯器上面的工具欄上的刷新。

解決方法2:現在將Android Gradle插件從1.2.x切換到1.1.3,以獲取 。當1.2.3發佈時,您可以切換回1.2.x版本。

解決方法3:如果上面的解決方法不爲你工作,而你是 在Windows,請嘗試從[鏈接在網站]下載構建

+3

更好的回答比接受的一個伊莫,+1 –

2

我有同樣的錯誤。解決方案是:

  • 首先,您必須同步您的項目。
  • 接下來,轉到生成菜單,並在清潔項目上點擊。
  • 最後,再次進入Build菜單,點擊Rebuild選項。

沒有必要改變一個東西,像一個魅力。

+0

謝謝,爲我工作:) –

1

我在我的styles.xml中使用<style name="AppTheme" parent="android:Theme.Light">,它工作。

0

我通過更改下面的值來解決它:Relative Layout - > Properties - > Padding |以數字值而不是默認值。然後點擊重建。

+1

你可以添加更多的解釋你剛剛做了什麼? –

-1

我正面臨同樣的問題。這是AppCompat主題的一些渲染問題。所以,我提出更改styles.xml文件,如下所示:

<style name="AppTheme" parent ="android:Theme.Holo.Light.DarkActionBar"> 
</style> 

所以問題resolved.However如果我們仍然要使用程序兼容性的主題,應該怎樣做,我還沒有發現。

+2

嗨SabU,歡迎來到stackoverflow。看起來你已經在格式化這篇文章時遇到了一些問題,因爲你在文章中缺少重要信息。您可以使用圖形編輯器來標記代碼(選擇代碼並使用上面的{}按鈕或在此處使用標記:http://stackoverflow.com/help/formatting – TygerKrash

0

對我來說,修復是通過改變res/values/styles.xml使用最新gradle這個版本

0

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 

DarkActionBarThemeNoActionBar

0

過Android Studio 3.0

在右上方,你可以見AppTheme。 點擊它,從下拉菜單中選擇「材質燈光」或其他默認設置。

相關問題