2013-08-29 2 views
5

Кто-нибудь знает, как и почему это происходит?просмотр пейджера и списка

java.lang.ClassCastException: android.support.v4.view.ViewPager$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
at android.widget.ListView.clearRecycledState(ListView.java:519) 
at android.widget.ListView.resetList(ListView.java:506) 
at android.widget.ListView.layoutChildren(ListView.java:1540) 
at android.widget.AbsListView.onLayout(AbsListView.java:2296) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1141) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1655) 
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1513) 
at android.widget.LinearLayout.onLayout(LinearLayout.java:1426) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
at android.view.View.layout(View.java:14055) 
at android.view.ViewGroup.layout(ViewGroup.java:4604) 
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1992) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1813) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4472) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
at android.view.Choreographer.doFrame(Choreographer.java:525) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
at android.os.Handler.handleCallback(Handler.java:615) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4898) 
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:1006) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
at dalvik.system.NativeStart.main(Native Method) 

Что я сделал

  1. открыть мой sherlockfragmentactivity с видом пейджера

  2. щелкнуть элемент на ListView внутри ViewPager, который возьмет меня ко второй активности

  3. нажмите кнопку назад, которая вернет нас к активности с помощью viewpager.

Первое действие на этих трех шагах в порядке, однако, когда я повторю второй шаг и третий шаг несколько раз быстро, иногда это вызовет эту проблему.

Любая идея, как исправить это?

Это мой код:

import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.viewpagerindicator.PageIndicator; 
import com.viewpagerindicator.TitlePageIndicator; 

import ex.godofsmith.helper.LocationService; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 

public class RestoFragmentActivity extends SherlockFragmentActivity { 

    private Intent locationService; 

    private ViewPager _mViewPager; 
    private RestoVPAdapter _adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_resto); 
     setTheme(R.style.Theme_Sherlock_Light_DarkActionBar); 

     //set location service 
     locationService = new Intent(this, LocationService.class); 
     //end location service 

     setUpView(); 
    } 

    @Override 
    public void onPause(){ 
     super.onPause(); 
     stopService(locationService); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     startService(locationService); 
    } 

    @Override 
    public void onDestroy(){ 
     super.onDestroy(); 
     //stopService(locationService); 
    } 

    private void setUpView(){ 

     _adapter = new RestoVPAdapter(getApplicationContext(),getSupportFragmentManager()); 

     _mViewPager = (ViewPager) findViewById(R.id.viewPager); 
     _mViewPager.setAdapter(_adapter); 
     _mViewPager.setCurrentItem(0); 
     _mViewPager.setOffscreenPageLimit(3); 

     PageIndicator mIndicator = (TitlePageIndicator)findViewById(R.id.indicator); 
     mIndicator.setViewPager(_mViewPager);  
    } 

} 

// ==================

import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 

public class RestoVPAdapter extends FragmentStatePagerAdapter { 
    //protected static final String[] CONTENT = new String[] { "Recommended", "Best", "Nearby", "Promo", "New"}; 
    protected static final String[] CONTENT = new String[] { "Nearby", "Promo", "New"}; 
    private Context _context; 
    private int mCount = CONTENT.length;  

    public RestoVPAdapter(Context context, FragmentManager fm) { 
     super(fm); 
     _context=context; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     Fragment f = new Fragment(); 
     switch(position){ 
//  case 0: 
//   //f=RestoRecommendedActivity.newInstance(_context); 
//   break; 
//  case 1: 
//   //f=RestoBestActivity.newInstance(_context); 
//   break; 
     case 0: 
      f=RestoNearByActivity.newInstance(_context); 
      break; 
     case 1: 
      f=RestoPromoFragment.newInstance(_context); 
      break; 
     case 2: 
      f=RestoNewActivity.newInstance(_context); 
      break; 
     } 

     return f; 
    } 

    @Override 
    public int getCount() { 
     return mCount; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return RestoVPAdapter.CONTENT[position % CONTENT.length]; 
    } 

} 

// ===== ==== Макет для деятельности, которая имеет вид пейджера в его

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@drawable/background"> 

    <com.viewpagerindicator.TitlePageIndicator 
     android:id="@+id/indicator" 
     android:padding="10dip" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent"   
     android:textColor="#FF000000" 
     app:footerColor="@color/greenslideup" 
     app:footerLineHeight="1dp" 
     app:footerIndicatorHeight="3dp" 
     app:footerIndicatorStyle="underline" 
     app:selectedColor="#FF000000" 
     app:selectedBold="true"/> 

    <ex.godofsmith.helper.CustomViewPager 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/viewPager" /> 

</LinearLayout> 

/==== Макет для моего фрагмента в окне просмотра пейджера ===

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ListView 
     android:id="@+id/lvNearBy" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
    </ListView> 

</LinearLayout> 
+0

Если я понимаю, проблема не возникает всегда, просто иногда вы нажимаете кнопку? –

+0

Это всегда происходит, но не в первый раз нажмите. Это происходит только иногда на втором, третьем или более. –

+0

Попытка показать «ViewPager» в «ListView»? –

ответ

0
java.lang.ClassCastException: android.support.v4.view.ViewPager$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 

эта линия кажется, что вы, возможно, положил макет через виджет, а затем он не может быть брошен. Но я не знаю, почему это работает, когда он нажал в первый раз.

Попробуйте отредактировать файл макета и повторите попытку.

+0

Я обновляю сообщение, чтобы вы знали мой макет. Я не нашел ничего подозрительного или неправильного. –

+1

Как-то мне удается решить эту проблему. Я не уверен, как, но я думаю, что решил это, удалив footerview из моих списков. –

16

в моем случае проблема была связана с установкой неправильного корневого контейнера для заголовка ListView во время накачивания:

НЕПРАВИЛЬНО КОД ВЫЗЫВАЕТ ОШИБКА:

transparentHeaderView = LayoutInflater.from(getActivity()).inflate(R.layout.transparent_header_view, activityContainer, false);

ПРАВИЛЬНЫЙ КОД:

transparentHeaderView = LayoutInflater.from(getActivity()).inflate(R.layout.transparent_header_view, listView, false);

как @Krishna Dewabrata намекнул, его проблема, вероятно, была причиной, сделав что-то похожее с нижним колонтитулом списка

+4

Просто спас день – krossovochkin