2014-10-30 2 views
10

Хотя я переопределение destroyItem(...) в PagerAdapter получает сообщение об ошибке при скольжении страницы в ViewPagerкак решить UnsupportedOperationException необходимого метода destroyItem не был преодолен

метод

UnsupportedOperationException Обязательного destroyItem не был преодолен

Java код

public class PropertyPagerAdapter extends PagerAdapter { 

    private Context _context; 
    private int layoutId; 
    private List<AddPropertyInfo> dataList; 

    public PropertyPagerAdapter(Context context, 
      int resourceId, List<AddPropertyInfo> objects) { 
     // TODO Auto-generated constructor stub 
     _context = context; 
     layoutId = resourceId; 
     dataList = objects; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return dataList.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View v, Object obj) { 
     // TODO Auto-generated method stub 
     return v == ((View) obj); 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     // TODO Auto-generated method stub 
     super.destroyItem(container, position, object); 
     ((ViewPager) container).removeView((View) object); 
    } 

    @SuppressLint("DefaultLocale") 
    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = (LayoutInflater) _context.getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     View pagerView = inflater.inflate(layoutId, container, false); 
     TextView propertyNameTxtView = (TextView) pagerView. 
       findViewById(R.id.propertyNameTxtView); 
     TextView netIncomeTxtView = (TextView) pagerView. 
       findViewById(R.id.netIncomeTxtView); 
     TextView netIncomeValueTxtView = (TextView) pagerView. 
       findViewById(R.id.netIncomeValueTxtView); 
     TextView netExpTxtView = (TextView) pagerView. 
       findViewById(R.id.netExpTxtView); 
     TextView netExpValueTxtView = (TextView) pagerView. 
       findViewById(R.id.netExpValueTxtView); 
     TextView netProfitTxtView = (TextView) pagerView. 
       findViewById(R.id.netProfitTxtView); 
     TextView netProfitValueTxtView = (TextView) pagerView. 
       findViewById(R.id.netProfitValueTxtView); 

     propertyNameTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netIncomeTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netIncomeValueTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netExpTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netExpValueTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netProfitTxtView.setTypeface(Utils.getRegularTypeface(_context)); 
     netProfitValueTxtView.setTypeface(Utils.getRegularTypeface(_context)); 

     String propertyName = ""; 
     double netIncomeVal; 
     double netExpVal; 
     double netProfitVal; 

     AddPropertyInfo addPropertyInfo = dataList.get(position); 
     netIncomeVal = addPropertyInfo.getIncomeAmnt(); 
     netExpVal = addPropertyInfo.getExpAmnt(); 
     netProfitVal = netIncomeVal - netExpVal; 
     propertyName = addPropertyInfo.getPropertyName(); 

     String netIncomeValStr = String.format("%.2f", netIncomeVal); 
     String netExpValStr = String.format("%.2f", netExpVal); 
     String netProfitValStr = String.format("%.2f", netProfitVal); 

     propertyNameTxtView.setText(propertyName); 
     netIncomeValueTxtView.setText(_context.getResources(). 
       getString(R.string.doller) + netIncomeValStr); 
     netExpValueTxtView.setText(_context.getResources(). 
       getString(R.string.doller) + netExpValStr); 
     netProfitValueTxtView.setText(_context.getResources(). 
       getString(R.string.doller) + netProfitValStr); 

     ((ViewPager) container).addView(pagerView); 

     return pagerView; 
    } 
} 

Журнал ошибок

10-30 18:59:11.711: E/AndroidRuntime(27093): FATAL EXCEPTION: main 
10-30 18:59:11.711: E/AndroidRuntime(27093): Process: com.teklabs.portfoliomanagenent, PID: 27093 
10-30 18:59:11.711: E/AndroidRuntime(27093): java.lang.UnsupportedOperationException: Required method destroyItem was not overridden 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.support.v4.view.PagerAdapter.destroyItem(PagerAdapter.java:192) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.support.v4.view.PagerAdapter.destroyItem(PagerAdapter.java:124) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at com.teklabs.portfoliomanagenent.adapter.PropertyPagerAdapter.destroyItem(PropertyPagerAdapter.java:47) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.support.v4.view.ViewPager.populate(ViewPager.java:1002) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:803) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.view.Choreographer.doCallbacks(Choreographer.java:603) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.view.Choreographer.doFrame(Choreographer.java:572) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:789) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.os.Handler.handleCallback(Handler.java:733) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.os.Handler.dispatchMessage(Handler.java:95) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.os.Looper.loop(Looper.java:157) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at android.app.ActivityThread.main(ActivityThread.java:5356) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at java.lang.reflect.Method.invokeNative(Native Method) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at java.lang.reflect.Method.invoke(Method.java:515) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) 
10-30 18:59:11.711: E/AndroidRuntime(27093): at dalvik.system.NativeStart.main(Native Method) 

Как решить это?

ответ

19

Не называйте супер. Удалить

super.destroyItem(container, position, object); 

экстракт исходного PagerAdapter кода

123 public void More ...destroyItem(ViewGroup container, int position, Object object) { 
124  destroyItem((View) container, position, object); 
125 } 

191 public void More ...destroyItem(View container, int position, Object object) { 
192  throw new UnsupportedOperationException("Required method destroyItem was not overridden"); 
193 } 
+0

Это правда, не называют super.destroyItem, я тоже столкнулся с этой проблемой. – Chauyan

+0

'super.destroyItem' работает только на' FragmentPagerAdapter' – Pierre

16

Просто переопределять:

@Override 
public void destroyItem(View container, int position, Object object) { 
    ((ViewPager) container).removeView((View) object); 
} 
2

При переопределении destroyItem, вы должны удалить объект getted в параметре из контейнера (также попадаются в параметры). Вы можете применить его к соответствующему типу View. Вот оно:

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    container.removeView((LinearLayout)object); 
} 
+0

Исключение появляется для вызова 'super' – kId

Смежные вопросы