2013-08-01 64 views
1

我使用自定義Layout來顯示我的ListView項目。 但是,當我嘗試在RunTime應用程序崩潰時設置字體。 首先,我嘗試訪問onCreate中的佈局的Texviews ...看到它不會工作,我在網上尋找答案,並發現我應該做我的自定義適配器中的設置。我也嘗試過,結果相同。在Android自定義ListView中設置字體

我的適配器是這樣的:

public class VizitaAdapter extends ArrayAdapter<Vizita>{ 
    Context context; 
    int layoutResourceId; 
    Typeface fontux = null; 

    public VizitaAdapter(Context context, int layoutResourceId, Vizita[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
     fontux = Typeface.createFromAsset(context.getAssets(), "fonts/myrprocond.otf"); 
    } 


@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     WeatherHolder holder = null; 
... 
... 
     ((TextView)row).setTypeface(fontux); 
     return row; 
} 

所以,當我的活動應該開始,我收到崩潰的應用程序的錯誤消息。在此之前,應用程序運行良好。 我在做什麼錯? 我應該可以設置不同的文字視圖到不同的TypeFaces。這實際上是我需要的。但我甚至不能一次設置所有的textViews ...

請幫忙。 謝謝

UPDATE 日誌是波紋管

08-01 16:57:22.727: D/szipinf(881): Initializing inflate state 08-01 16:57:22.787: D/AndroidRuntime(881): Shutting down VM 08-01 16:57:22.787: W/dalvikvm(881): threadid=1: thread exiting with uncaught exception (group=0x40015560) 08-01 16:57:22.797: E/AndroidRuntime(881): FATAL EXCEPTION: main 08-01 16:57:22.797: E/AndroidRuntime(881): java.lang.ClassCastException: android.widget.RelativeLayout 08-01 16:57:22.797: E/AndroidRuntime(881): at softwarex.ssmmonitor_custom.VizitaAdapter.getView(VizitaAdapter.java:50) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.ListView.makeAndAddView(ListView.java:1745) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.ListView.fillDown(ListView.java:670) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.ListView.fillFromTop(ListView.java:727) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.ListView.layoutChildren(ListView.java:1598) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.AbsListView.onLayout(AbsListView.java:1260) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.View.layout(View.java:7175) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.View.layout(View.java:7175) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.View.layout(View.java:7175) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.View.layout(View.java:7175) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.View.layout(View.java:7175) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.os.Handler.dispatchMessage(Handler.java:99) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.os.Looper.loop(Looper.java:123) 08-01 16:57:22.797: E/AndroidRuntime(881): at android.app.ActivityThread.main(ActivityThread.java:3683) 08-01 16:57:22.797: E/AndroidRuntime(881): at java.lang.reflect.Method.invokeNative(Native Method) 08-01 16:57:22.797: E/AndroidRuntime(881): at java.lang.reflect.Method.invoke(Method.java:507) 08-01 16:57:22.797: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 08-01 16:57:22.797: E/AndroidRuntime(881): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 08-01 16:57:22.797: E/AndroidRuntime(881): at dalvik.system.NativeStart.main(Native Method) 08-01 16:57:24.657: I/Process(881): Sending signal. PID: 881 SIG: 9

我不知道如何將日誌格式看起來更具可讀性:(

此外,我改變了上面的代碼,以反映最新嘗試(這也給了我這個錯誤)

+0

我會建議使用這種風格的適配器的方法getView。使用持有者並檢查convertView是否爲null:http://www.piwai.info/android-adapter-good-practices/#ViewHolder-Pattern –

+0

什麼是VizitaAdapter.java中的50行? – esentsov

+0

這行:((TextView)row).setTypeface(fontux); – user1137313

回答

1

請附上日誌 最有可能你有這條線上NullPointerException

Typeface face=Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf"); 
((TextView)row).setTypeface(face); 

convertView可能null,你應該建立在這種情況下,一個新的或調用超類(link

+0

我也認爲問題出現在'Typeface fontux = Typeface.createFromAsset(context.getAssets(),「fonts/myrprocond.otf」);'。我從持有者中刪除了所有其他對字體設置的引用,如果我取消註釋此行,則應用程序崩潰。如果我評論它,那麼應用程序的作品。所以我想這是問題所在。但爲什麼?以及如何解決? – user1137313

+0

發佈日誌,請 – esentsov

+0

我必須在問題中發佈日誌(它們太長)。在10秒內,他們將在那裏。完成 – user1137313