2013-05-08 28 views
10

我有這種奇怪的行爲,我無法解釋。 我的佈局非常簡單:一個EditText:longPress上的Android EditText:ArrayIndexOutOfBoundsException:length = 15; index = 491

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:padding="10dp" > 


     <EditText 
      android:id="@+id/etPass" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

</LinearLayout> 

當我嘗試長按它(粘貼一些文本),我得到了一個imediate強制關閉,但此錯誤:

05-08 16:56:16.838: E/AndroidRuntime(12164): FATAL EXCEPTION: main 
05-08 16:56:16.838: E/AndroidRuntime(12164): android.view.InflateException: Binary XML file line #17: Error inflating class <unknown> 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.inflate(LayoutInflater.java:466) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$ActionPopupWindow.initContentView(Editor.java:2995) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:2280) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$HandleView.showActionPopupWindow(Editor.java:3189) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$InsertionHandleView.showWithActionPopup(Editor.java:3416) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor$InsertionPointCursorController.showWithActionPopup(Editor.java:3652) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.Editor.performLongClick(Editor.java:870) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.TextView.performLongClick(TextView.java:7973) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.View$CheckForLongPress.run(View.java:17140) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.os.Handler.handleCallback(Handler.java:615) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.os.Handler.dispatchMessage(Handler.java:92) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.os.Looper.loop(Looper.java:213) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.app.ActivityThread.main(ActivityThread.java:4786) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at java.lang.reflect.Method.invokeNative(Native Method) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at java.lang.reflect.Method.invoke(Method.java:511) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at dalvik.system.NativeStart.main(Native Method) 
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.reflect.InvocationTargetException 
05-08 16:56:16.838: E/AndroidRuntime(12164): at java.lang.reflect.Constructor.constructNative(Native Method) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
05-08 16:56:16.838: E/AndroidRuntime(12164): ... 25 more 
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=15; index=491 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.content.res.StringBlock.get(StringBlock.java:64) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.content.res.TypedArray.getString(TypedArray.java:124) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.TextView.<init>(TextView.java:800) 
05-08 16:56:16.838: E/AndroidRuntime(12164): at android.widget.TextView.<init>(TextView.java:450) 
05-08 16:56:16.838: E/AndroidRuntime(12164): ... 28 more 

我也實在沒有線索發生了什麼,我很樂意得到一些幫助!

只是要清楚,我在我的活動相關的聽衆對這個EditText上沒有什麼:

import android.app.Activity; 
import android.os.Bundle; 

public class ProActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.activity_pro); 

    } 

} 
+0

聲音就像一個加載項發生故障。你是在模擬器還是實際的電話中執行此操作? – DigCamara 2013-05-08 15:08:09

+0

在Sony Xperia Z上,我現在會嘗試模擬器。 – 2013-05-08 15:09:37

+1

看起來像系統試圖創建一個包含TextView的PopupWindow。然後在應用主題時崩潰。你使用自定義主題嗎?那裏有什麼不尋常的事情? – devconsole 2013-05-08 15:10:26

回答

24

剛剛從你的自定義樣式刪除此行

這一行:

<item name="android:fontFamily">sans-serif-light</item> 

長時間按下EditText會導致崩潰。

Android複製/粘貼彈出窗口是錯誤的根源。

+0

沒有插件?在某種程度上,這令人失望。並且它在仿真器中也崩潰了嗎? – DigCamara 2013-05-08 15:58:12

+0

我有相同的錯誤,並從主題樣式標籤中移除fontFamily標籤修復了它。但是,糾正我,如果我錯了,我假設設置fontFamily在主題中沒有影響子元素。您必須爲TextViews,EditTexts,按鈕等創建額外的樣式。 – 2013-11-13 16:14:33

+1

在http://stackoverflow.com/questions/16404820/how-to-set-default-font-family-for-entire-android-app上應用答案這是一個解決方法。 還要加 '<項目名稱= 「機器人:editTextStyle」> @風格/ EditText上' 和: '<樣式名稱= 「EditText上」 父= 「機器人:Widget.EditText」>'' sans-serif-light' '' – 2014-09-26 17:22:44

0

我也遇到過這個問題;

但它的原因是我使用ContextThemeWrapper;

這裏是我們如何從ContextThemeWrapper

@Override 
public Object getSystemService(String name) { 
    if (LAYOUT_INFLATER_SERVICE.equals(name)) { 
     if (mInflater == null) { 
      mInflater = LayoutInflater.from(mBase).cloneInContext(this); 
     } 
     return mInflater; 
    } 
    return mBase.getSystemService(name); 
} 

從代碼塊得到LayoutInflater上面,我們可以看到,它處理LayoutInflater特別,這是問題的根源。

我的解決方法是:重寫此方法如下

@Override 
public Object getSystemService(String name){ 
    return getBaseContext().getSystemService(name); 
} 
1

這個環節解決了我的問題,雖然自動完成在XML文件中是行不通的,但在這個例子中的代碼是正確的,我聲明的所有在相同的樣式文件和它的工作:

https://github.com/rengwuxian/MaterialEditText/issues/162

,這就是在它說:

似乎在款式錯誤,請驗證您在應用程序的主題有

<item name="android:fontFamily"></item> 

,而不是在主題視圖,在應用的主題。 發生同樣的錯誤我,直到我刪除了這條線我style.xml的,如果你有行,刪除它們,如果你需要這個屬性,你可以風格化textviews和按鈕:

<style name="TextViewStyle" parent="android:Widget.TextView"> 
    <item name="android:fontFamily">sans-serif-medium</item> 
</style> 

<style name="ButtonStyle" parent="android:Widget.Holo.Button"> 
    <item name="android:fontFamily">sans-serif-medium</item> 
</style> 

而且在你的應用程序主題,使用:

<item name="android:textViewStyle">@style/TextViewStyle</item> 
<item name="android:buttonStyle">@style/ButtonStyle</item> 
+1

適合我!很好的發現。 – ImGreg 2015-12-09 15:07:53