2012-05-12 13 views
1

Androidレイアウトエディタがカスタムビューをインスタンス化できないため、レイアウトエディタで適切なプレビューが表示されません。それは int attr = a.getIndex(i);カスタムレイアウトのプレビュー時にAndroidレイアウトエディタが例外をスローする

奇妙なことがあるライン文句だ

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PinCodeView); 
    try { 
     int n = a.length(); 
     for (int i = 0; i < n; i++) { 
      int attr = a.getIndex(i); 

      switch (attr) { 
      case R.styleable.PinCodeView_pinLength: 
       pinLength = a.getInt(attr, 0); 
       break; 
      /* more case statements */ 
      } 
     } 
    } finally { 
     a.recycle(); 
    } 

私が代わりにこのような何かをすれば、私はこの問題を得ることはありません:これは私のコンストラクタである

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PinCodeView); 
    try { 

     pinLength = a.getInt(R.styleable.PinCodeView_pinLength, 0); 
     /* and so on for other attrs */ 

    } finally { 
     a.recycle(); 
    } 

Eclipseからのスタックトレースは次のとおりです。

java.lang.ArrayIndexOutOfBoundsException: 2 
at android.content.res.TypedArray.getIndex(TypedArray.java:71) 
at com.example.pincode.PinCodeView.<init>(PinCodeView.java:52) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:402) 
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:166) 
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) 
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135) 
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:739) 
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:711) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:372) 
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:321) 
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:324) 
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:372) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1361) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1115) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:941) 
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.partActivated(LayoutEditorDelegate.java:477) 
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.partBroughtToTop(LayoutEditorDelegate.java:487) 
at org.eclipse.ui.internal.PartListenerList$2.run(PartListenerList.java:87) 
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) 
at org.eclipse.core.runtime.Platform.run(Platform.java:888) 
at org.eclipse.ui.internal.PartListenerList.fireEvent(PartListenerList.java:57) 
at org.eclipse.ui.internal.PartListenerList.firePartBroughtToTop(PartListenerList.java:85) 
at org.eclipse.ui.internal.PartService.firePartBroughtToTop(PartService.java:208) 
at org.eclipse.ui.internal.WorkbenchPagePartList.firePartBroughtToTop(WorkbenchPagePartList.java:76) 
at org.eclipse.ui.internal.WorkbenchPagePartList.fireActiveEditorChanged(WorkbenchPagePartList.java:52) 
at org.eclipse.ui.internal.PartList.setActiveEditor(PartList.java:162) 
at org.eclipse.ui.internal.WorkbenchPage.makeActiveEditor(WorkbenchPage.java:1281) 
at org.eclipse.ui.internal.WorkbenchPage.setActivePart(WorkbenchPage.java:3530) 
at org.eclipse.ui.internal.WorkbenchPage.requestActivation(WorkbenchPage.java:3077) 
at org.eclipse.ui.internal.PartPane.requestActivation(PartPane.java:279) 
at org.eclipse.ui.internal.EditorPane.requestActivation(EditorPane.java:98) 
at org.eclipse.ui.internal.PartPane.setFocus(PartPane.java:325) 
at org.eclipse.ui.internal.EditorPane.setFocus(EditorPane.java:127) 
at org.eclipse.ui.internal.PartStack.presentationSelectionChanged(PartStack.java:844) 
at org.eclipse.ui.internal.PartStack.access$1(PartStack.java:827) 
at org.eclipse.ui.internal.PartStack$1.selectPart(PartStack.java:137) 
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:133) 
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:269) 
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:278) 
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder.access$1(DefaultTabFolder.java:1) 
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder$2.handleEvent(DefaultTabFolder.java:88) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3783) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1398) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1383) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1195) 
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2743) 
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1429) 
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3783) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1398) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1383) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1195) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3629) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3284) 
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604) 
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438) 
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1408) 

答えて

1

これを試してください:

TypedArray a = context.obtainStyledAttributes(attrs, 
R.styleable.PinCodeView); 
int n = a.getIndexCount(); 
for(int i =0;i < n;i++){ 
int attr = a.getIndex(i); 
switch(attr){ 
    case R.styleable.PinCodeView_pinLength: 
    String strtext=a.getString(R.styleable.PinCodeView_pinLength); 
    break;  
    default: 
     break; 
    }    
    } 
a.recycle(); 
+0

それは、ありがとうございます。私はa.length()がうまくいきませんが、それは大丈夫です。 – Karakuri

+0

いつも友人を歓迎します。 –

関連する問題