2017-02-21 136 views
0

我有一個TextView,我想得到一些特定的行文本,但是當我使用txt.getLayout.getLineStart(1)時,它返回null並崩潰應用程序,原因是什麼?getLineStart()總是爲我的TextView返回null?

TextView txt = (TextView)mRootView.findViewById(R.id.txt); 
int start = txt.getLayout().getLineStart(1); 
int end = txt.getLayout().getLineEnd(1); 
String first = txt.getText().subSequence(start,end).toString(); 

崩潰日誌

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.sattva.animalsencyclopedia, PID: 11244 
        java.lang.NullPointerException 
         at com.sattva.animalsencyclopedia.fragments.FragmentInformation.onViewCreated(FragmentInformation.java:110) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086) 
         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
         at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738) 
         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
         at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
         at android.os.Handler.handleCallback(Handler.java:808) 
         at android.os.Handler.dispatchMessage(Handler.java:103) 
         at android.os.Looper.loop(Looper.java:193) 
         at android.app.ActivityThread.main(ActivityThread.java:5333) 
         at java.lang.reflect.Method.invokeNative(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:515) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645) 
         at dalvik.system.NativeStart.main(Native Method) 
+2

顯示代碼,請 –

+0

@IntelliJAmiya我已經編輯後 – DavidOli

+0

簡單地檢查什麼'txt.getLayout()'返回... – pskink

回答

1

也許你沒發現用正確的方式方法findViewById()這一觀點。你正在使用片段,可能你有類似getActivity().findViewById()。嘗試在你的onCreateView()方法做這樣的事情view.findViewById(),其中view是膨脹的結果。

As @pskink從文檔中提到:returns Layout the Layout that is currently being used to display the text. This can be null if the text or width has recently changes.嘗試在onStart或onCreate方法中調用此代碼,但應該將txt作爲類成員變量。與logcat的

int start = txt.getLayout().getLineStart(1); 
int end = txt.getLayout().getLineEnd(1); 
String first = txt.getText().subSequence(start,end).toString(); 
+0

我已經完成了@kostya – DavidOli

+0

這是什麼mRootView?可能它有null – Kostya

+0

mRootView = inflater.inflate(R.layout.fragment_informations,container,false); @kostya – DavidOli