2017-02-21 87 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