2013-06-13 46 views
0

我使用第三方工具來創建一個類似於iPhone,you can see it here一個TableView的StackOverflowError。的EditText導致舊設備

我已經做了這個包的編輯好位,並已增加了一排有一個EditText的能力。我在不同的設備上測試過它,效果很好。現在我遇到的問題是,如果我在嵌套佈局中有這個UITableView,並給出一行編輯文本,當用戶在一些較舊的設備上單擊EditText時,它會導致一個計算器。

這是一個片段。結構看起來像這樣

(1)(2)(3)(4) 的RelativeLayout - >的RelativeLayout - >的RelativeLayout - > ScrollLayout - >的UITableView

有背景的位背後但總而言之我需要所有這些佈局,因此刪除其中的一個不是一種選擇。這是令人沮喪的,因爲如果我刪除了RelativeLayouts之一,該應用程序不會崩潰。

android UITableView也使用幾個LinearLayouts進行設置。理想情況下,如果我可以將LinearLayout設置爲可以滾動,那將是非常好的,這樣我就可以移除ScrollLayout並且問題將消失,但令人遺憾的是我不相信這是可能的。

我得到的錯誤是

06-13 07:42:23.399: E/AndroidRuntime(1429): FATAL EXCEPTION: main 
06-13 07:42:23.399: E/AndroidRuntime(1429): java.lang.StackOverflowError 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2758) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.getChildVisibleRect(ViewGroup.java:2759) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView$HandleView.isPositionVisible(TextView.java:8228) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView$HandleView.moveTo(TextView.java:8245) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView$HandleView.positionAtCursor(TextView.java:8340) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView$InsertionPointCursorController.updatePosition(TextView.java:8401) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView.updateCursorControllerPositions(TextView.java:4292) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.TextView.onDraw(TextView.java:4281) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6986) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6989) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6989) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:7093) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.FrameLayout.draw(FrameLayout.java:361) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.ScrollView.draw(ScrollView.java:1421) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6989) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6989) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.View.draw(View.java:6989) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.widget.FrameLayout.draw(FrameLayout.java:361) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1739) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1466) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.ViewGroup.drawChild(ViewGroup.java:1737) 
06-13 07:42:23.399: E/AndroidRuntime(1429):  at android.view.Vi 

我已經測試了這個在許多較新的設備,的Nexus,HTC等,並沒有任何問題。但是,當我在較舊的設備上進行測試時,Sony Ericson Mini Pro 2發生此錯誤。我想,以確保此應用在舊設備不會崩潰,目前應用程序支持2.3.3+

有沒有人有任何想法,這是什麼遞歸調用發生的事情,這是造成舊設備崩潰?無論如何,要防止這種情況發生。

任何意見將不勝感激。

回答

0

您擁有的佈局對於那些需要處理的設備來說太深了。您從發佈的內容中獲得了4個佈局(僅限於片段?如果是,則還包含活動的佈局)+ UITableView。現在我不知道你做了什麼改變,但是從UITableView的代碼快速查看效率不是很高。 UITableView擴展LinearLayout僅用於膨脹另一個佈局作爲其內容,其中LinearLayout包裝另一個Linearlayout。所以UITableView增加了三個額外的佈局,但沒有提到它的內容。

要麼丟棄UITableView(你肯定不能使用ListView(這可能會殺死所有的性能問題/例外)),修改和完善它,所以它不會在佈局或添加這麼多的水平保留它並修改其他佈局以提高效率。

+0

我有一種感覺,這將是答案。我使用這個工具的原因是它爲我做了四捨五入的處理,並且如果需要的話,還可以給我一個添加EditText的選項。我想我將不得不使用GridView或ListView,而只需要花一兩個星期的時間來完成它。感謝您的輸入!! – AdamM

+0

@AdamM我再次看了一下圖書​​館的代碼。但是你可以通過使用'list_container.xml'文件中的merge標籤而不是* viewsContainer *'LinearLayout'並將其所有屬性直接移動到'UITableView'中,從而使'UITableView'失去一個佈局級別擴展了'LinearLayout'。但是我不知道這是否適用於圖書館的其他部分,但它可能值得一試。 – Luksprog

+0

可以看看這個,但是你提到的庫的另一個問題是性能,它的行數不算太差,但是如果你拉回大量的數據,比如30+行,它可能會很慢即使在較新的設備上。將嘗試使用合併標籤,看看是否有幫助,但我有感覺,即使這確實解決了stackoverflow錯誤,它可能不會做太多的性能問題。感謝您的時間和精力!非常感謝 – AdamM

相關問題