4

我已經安裝了支持庫,以獲得操作欄還曾在機器人前API 11的Android,logcat中提供了有關SearchView類

當我啓動應用程序時,logcat的給這個錯誤錯誤:

08-20 19:54:41.600: I/dalvikvm(9828): Failed resolving Landroid/support/v7/widget/SearchView$5; interface 809 'Landroid/view/View$OnLayoutChangeListener;' 

08-20 19:54:41.600: W/dalvikvm(9828): Link of class 'Landroid/support/v7/widget/SearchView$5;' failed 

08-20 19:54:41.600: E/dalvikvm(9828): Could not find class 'android.support.v7.widget.SearchView$5', referenced from method android.support.v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11 

08-20 19:54:41.600: W/dalvikvm(9828): VFY: unable to resolve new-instance 734 (Landroid/support/v7/widget/SearchView$5;) in Landroid/support/v7/widget/SearchView; 

08-20 19:54:41.600: D/dalvikvm(9828): VFY: replacing opcode 0x22 at 0x0002 

08-20 19:54:41.600: D/dalvikvm(9828): VFY: dead code 0x0004-000a in Landroid/support/v7/widget/SearchView;.addOnLayoutChangeListenerToDropDownAnchorSDK11()V 

有人可以幫助我,我在網上搜索,但我什麼也沒找到。 謝謝

MainActivity.Java

package com.example.fanculo; 

    import android.os.Bundle; 
    import android.app.SearchManager; 
    import android.content.Context; 
    import android.support.v4.view.MenuItemCompat; 
    import android.support.v7.widget.SearchView; 
    import android.support.v7.app.ActionBar; 
    import android.support.v7.app.ActionBarActivity; 
    import android.view.Menu; 
    import android.view.MenuItem; 


    public class MainActivity extends ActionBarActivity{ 

ActionBar actionBar; 

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

    actionBar = getSupportActionBar(); 
    actionBar.setTitle("Test"); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 

    SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    // Configure the search info and add any event listeners 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(true); 
    return super.onCreateOptionsMenu(menu); 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_search: 
      onSearchRequested(); 
      return true; 
     default: 
      return false; 
    } 
} 

}

+0

在buil; d路徑中添加了v4庫; – karan421

+0

嗨,我有圖書館,但似乎android找不到,問題是在同一個圖書館,我有一些其他類沒有問題,這樣的ActionBar,我把我的MainActivy上面的代碼,希望有人可以halp我 – Bombolo

+0

這個問題似乎是android無法找到android.support.v7.widget.SearchView;但我在圖書館有 – Bombolo

回答

8

我認爲這是在支持庫SearchView.java類的錯誤,你可以看到它是在普通使用View.OnLayoutChangeListener實現文件:

https://android.googlesource.com/platform/frameworks/support.git/+/android-4.3_r1/v7/appcompat/src/android/support/v7/widget/SearchView.java

這使得類加載器嘗試加載View.OnLayou tChangeListener,自api級別11以後可用 - 即使這個* SDK11方法甚至沒有被調用。我想這個方法addOnLayoutChangeListenerToDropDownAnchorSDK11應該移到外部Java類,並僅用於設備的API> = 11

您可以重現這個bug複製這些代碼到你自己的活動:

private void addOnLayoutChangeListenerToDropDownAnchorSDK11() { 
    new View.OnLayoutChangeListener() { 
     @Override 
     public void onLayoutChange(View v, int left, int top, int right, int bottom, 
            int oldLeft, int oldTop, int oldRight, int oldBottom) { 
     } 
    }; 
} 

public void onCreate(...) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      addOnLayoutChangeListenerToDropDownAnchorSDK11(); 
     } 
} 
下面

是什麼logcat的打印:

08-31 22:50:33.030: INFO/dalvikvm(20753): Failed resolving Lcom/example/ActionBarTester/MyActivity$1; interface 813 'Landroid/view/View$OnLayoutChangeListener;' 
08-31 22:50:33.030: WARN/dalvikvm(20753): Link of class 'Lcom/example/ActionBarTester/MyActivity$1;' failed 
08-31 22:50:33.030: ERROR/dalvikvm(20753): Could not find class 'com.example.ActionBarTester.MyActivity$1', referenced from method com.example.ActionBarTester.MyActivity.addOnLayoutChangeListenerToDropDownAnchorSDK11 
08-31 22:50:33.030: WARN/dalvikvm(20753): VFY: unable to resolve new-instance 903 (Lcom/example/ActionBarTester/MyActivity$1;) in Lcom/example/ActionBarTester/MyActivity; 
08-31 22:50:33.030: DEBUG/dalvikvm(20753): VFY: replacing opcode 0x22 at 0x0000 
08-31 22:50:33.030: DEBUG/dalvikvm(20753): VFY: dead code 0x0002-0005 in Lcom/example/ActionBarTester/MyActivity;.addOnLayoutChangeListenerToDropDownAnchorSDK11()V 

我不知道如果這個錯誤其實就是造成任何問題,在我的情況對API等級10搜索查看的作品,也高於測試讓我的活動工作。也許我在這裏錯過了一些東西。

+3

我同意這是appcompat lib中的某種錯誤。一切似乎都正常工作;仍然,我恨看到LogCat中的紅色墨水...... – d370urn3ur

0

如何使用ActionBarSherlock? 它靈活且支持舊版本,而且實現起來非常簡單。

所有你需要做的就是切換你正在擴展的每個類活動在SherlockActivity和其他片段。我建議你嘗試一下! https://github.com/JakeWharton/ActionBarSherlock

-1

您需要確保您在Eclipse中正確添加Android V7支持庫,以從日誌中刪除以下錯誤'無法找到從android.support方法引用的類android.support.v7.widget.SearchView $ 5。 v7.widget.SearchView.addOnLayoutChangeListenerToDropDownAnchorSDK11' 。

需要記住的重要事情,不要忘記取消選中Android的依賴添加支持庫時,因爲V7程序兼容性圖書館的資源。在您的支持庫項目中對您的依賴進行更改後,清理支持庫項目即可。

有關如何向資源添加支持庫,請參閱官方Google doco的Adding Libraries with Resources部分的完整步驟。從案例鏈接更改上面提到的DOCO

摘錄於未來:

  1. 確保您已使用 SDK管理器下載了Android的支持庫。
  2. 創建庫項目,並確保所需的JAR文件 包含在項目的構建路徑:
    • 選擇File> Import。
    • 選擇現有的Android代碼進入工作區,然後單擊下一步。
    • 瀏覽到SDK安裝目錄,然後瀏覽到Support Library 庫文件夾。例如,如果要添加appcompat 項目,請瀏覽至/ extras/android/support/v7/appcompat /。
    • 單擊完成導入項目。對於v7 appcompat項目,您現在應該看到一個名爲android-support-v7-appcompat的新項目,其中 。
    • 在新庫項目中,展開libs /文件夾,右鍵單擊每個 .jar文件,然後選擇構建路徑>添加到構建路徑。例如,在創建v7 appcompat項目時,請將 android-support-v4.jar和android-support-v7-appcompat.jar文件添加到 構建路徑中。
    • 右鍵單擊項目,然後選擇「構建路徑」>「配置構建路徑」。在Order和Export選項卡中,檢查剛剛添加到構建路徑的.jar文件,以便它們可用於依賴此庫項目的項目。例如,appcompat項目要求您導出android-support-v4.jar和android-support-v7-appcompat.jar文件。
    • 取消選中Android依賴關係。
    • 單擊確定完成更改。
+1

這是我在最初設置v7支持庫時所做的,我遵循這個單詞。有這個錯誤。通過你的建議回頭看看我是否錯過了一些東西。沒有運氣,仍然有相同的錯誤。我同意marcin_j,這肯定是個bug。不過,我仍然可以正確地使用SearchView,所以我不會因此而撕毀... – d370urn3ur

+0

對我來說也不適用。 –

相關問題