2015-12-10 6 views
5

ich unter Absturzprotokollen bin immer bei der Verwendung von getMaxLines() Methode von TexView auf Ice Cream Sandwich Android 4.0.3 Version,Alternative Methode TextView.getMaxLines() für Android 4.0.3 (API 15) und unter

Also ich Das eigentliche Problem ist, dass meine Anwendung niedriger sdk läuft, die diese getMaxLines() -Methode nicht hat.

Wie kann dieser Absturz entfernt werden. Ich fand keine Alternative Methode

java.lang.NoSuchMethodError: android.widget.TextView.getMaxLines 
      at com.text.mobile.new.adapters.ServiceListAdapter.onBindViewHolder(ServiceListAdapter.java:232) 
      at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5277) 
      at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5310) 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4568) 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4461) 
      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1962) 
      at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:438) 
      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334) 
      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563) 
      at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171) 
      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847) 
      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.RelativeLayout.onLayout(RelativeLayout.java:925) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
      at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 
      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 
      at android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 
      at android.view.View.layout(View.java:11278) 
      at android.view.ViewGroup.layout(ViewGroup.java:4224) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1489) 
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4424) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

Gefunden etwas ähnliches Kontrolle dieses http: // Stackoverflow .com/questions/16255480/is-it-possible-to-textviewgetmaxlines-on-pre-api-16-devices – Raghavendra

Antwort

8

Die getMaxLines() von TextViewCompat wie die geeigneten Lösung für diese aussieht.

Sie können auch in der SourceCode von TextViewCompat schauen, und kopieren Sie die Funktionen, die Sie benötigen.

Code:

int maxLines = TextViewCompat.getMaxLines(yourtextView); 

statt:

int maxLines = yourtextView.getMaxLines(); 

ich sehr empfehlen die Unterstützung lib und TextViewCompat verwenden. Aber nur der Vollständigkeit halber, hier ist auch der (Strom) Quelle TextViewCompatDonut ‚s getMaxLines:

static int getMaxLines(TextView textView) { 
     if (!sMaxModeFieldFetched) { 
      sMaxModeField = retrieveField("mMaxMode"); 
      sMaxModeFieldFetched = true; 
     } 
     if (sMaxModeField != null && retrieveIntFromField(sMaxModeField, textView) == LINES) { 
      // If the max mode is using lines, we can grab the maximum value 
      if (!sMaximumFieldFetched) { 
       sMaximumField = retrieveField("mMaximum"); 
       sMaximumFieldFetched = true; 
      } 
      if (sMaximumField != null) { 
       return retrieveIntFromField(sMaximumField, textView); 
      } 
     } 
     return -1; 
    } 
+0

@LavekushAgrawal schau dir meine bearbeitete Antwort an – FlanschiFox

+0

Vielen Dank, aber mein Compiler hat die getMaxLines in TextViewCompat nicht gefunden Nun, –

+0

@ LavekushAgrawal Möglicherweise müssen Sie Ihre Support-Bibliothek aktualisieren. – FlanschiFox

0

die Sie interessieren, kann es helfen,

 TextView t1 = (TextView) findViewById(R.id.txt1); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
      int no= t1.getMaxLines(); 
      Log.e("No of Lines: ", String.valueOf(no)); 
     }