2015-12-10 29 views
5

che sto ottenendo qui sotto resoconti di blocco durante l'utilizzo getMaxLines() metodo Texview su Ice Cream Sandwich di Android versione 4.0.3,metodo alternativo per TextView.getMaxLines() per Android 4.0.3 (API 15) e al di sotto

Così ho il vero problema è che la mia applicazione sta eseguendo sdk inferiore che non ha questo metodo getMaxLines().

Come rimuovere questo arresto anomalo. Non ho trovato alcun metodo alternative

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

trovato qualcosa di simile controllo questo http: // StackOverflow .com/questions/16255480/is-it-possible-to-textviewgetmaxlines-on-pre-api-16-devices – Raghavendra

risposta

8

La getMaxLines() di TextViewCompat sembra la soluzione appropriata per questo.

È anche possibile dare un'occhiata allo SourceCode di TextViewCompat e copiare le funzioni necessarie.

Codice:

int maxLines = TextViewCompat.getMaxLines(yourtextView); 

invece di:

int maxLines = yourtextView.getMaxLines(); 

Mi consiglia di utilizzare il lib sostegno e TextViewCompat. Ma solo per completezza, ecco anche la (attuale) fonte di getMaxLinesTextViewCompatDonut s':

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 controlla la mia risposta modificata – FlanschiFox

+0

Grazie mille, ma il mio compilatore non ha trovato getMaxLines in TextViewCompat come bene, –

+0

@LavekushAgrawal Potrebbe essere necessario aggiornare la tua lib di supporto. – FlanschiFox

0

Prova questa, può essere utile,

 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)); 
     } 
Problemi correlati