Crash al devolver el fragmento como una pestaña. Ver con la misma ID

Mi actividad principal tiene una ActionBar con dos pestañas. La pestaña 1 es un ListFragment y la pestaña 2 es un fragmento que utiliza la biblioteca HeaderListView. Cuando abre la aplicación, aparece la pestaña 1. Cuando cambia a la pestaña 2 y, a continuación, vuelve a la pestaña 1 y finalmente regresa a la pestaña 2, la aplicación se bloquea con lo siguiente:

09-12 13:19:22.440 21772-21772/com.iosharp.android.smoothstreams E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.iosharp.android.smoothstreams, PID: 21772 java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.widget.AbsListView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/header_list_view. Make sure other views do not use the same id. 

Id / header_list_view sólo se utiliza en la pestaña 2 y sólo en el método onCreateView () y no se inflama en la pestaña 1. Estoy perplejo en cuanto a dónde ir desde aquí. También por lo que vale la pena estoy usando android.app.v4.support.Fragment

Las partes relevantes del fragmento de la lengüeta 2:

 public class ProgrammeListFragment extends Fragment { private static final String TAG = ProgrammeListFragment.class.getSimpleName(); private ArrayList<Programme> mProgrammes; private ArrayList<Day> mDays; private Date mNow; private HeaderListView mHeaderListView; static private SectionAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNow = new Date(); mProgrammes = ProgrammeStore.get(getActivity()).getProgrammes(); Collections.sort(mProgrammes, new Programme()); mProgrammes = trimProgrammes(mProgrammes); mDays = setupDays(mProgrammes); } @Override public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.progamme_header_list, container, false); mHeaderListView = (HeaderListView) v.findViewById(R.id.header_list_view); mAdapter = new SectionAdapter() { @Override public int numberOfSections() { return mDays.size(); } @Override // TODO: sometimes -1 is passed as int section, this needs to be looked at later public int numberOfRows(int section) { if (section > -1) { return mDays.get(section).getLineUp().size(); } else { return 1; } } @Override public View getRowView(int section, int row, View convertView, ViewGroup parent) { convertView = getActivity().getLayoutInflater().inflate( R.layout.programme_list_item, null); //set views return convertView; } @Override public Day getSectionHeaderItem(int section) { return mDays.get(section); } @Override public int getSectionHeaderItemViewType(int section) { return super.getSectionHeaderItemViewType(section); } @Override public boolean hasSectionHeaderView(int section) { return true; } @Override public View getSectionHeaderView(int section, View convertView, ViewGroup parent) { convertView = getActivity().getLayoutInflater().inflate(R.layout.programme_list_header, null); // set views return convertView; } @Override public Programme getRowItem(int section, int row) { return mDays.get(section).getLineUp().get(row); } }; mHeaderListView.setAdapter(mAdapter); return v; } } 

Las partes relevantes de MainActivity que instancian los fragmentos y las pestañas:

 public class MainActivity extends ActionBarActivity { private static final String TAG = MainActivity.class.getSimpleName(); private static final String KEY_TAB = "tab"; private Fragment fragmentChannels = new ChannelListFragment(); private Fragment fragmentProgrammes = new ProgrammeListFragment(); private int mCurrentTab; private ActionBar mActionBar; private ArrayList<Channel> mChannels; private ArrayList<Programme> mProgrammes; private ProgressDialog mProgressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment); mActionBar = getSupportActionBar(); mActionBar.setTitle(R.string.app_name); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mActionBar.addTab(mActionBar.newTab().setText(R.string.channels_title).setTabListener(new TabListener(fragmentChannels))); mActionBar.addTab(mActionBar.newTab().setText(R.string.programmes).setTabListener(new TabListener(fragmentProgrammes))); // Get singletons mProgrammes = ProgrammeStore.get(getApplication()).getProgrammes(); mChannels = ChannelStore.get(getApplicationContext()).getChannels(); } } 

Y por si acaso dos métodos de la clase TabListener tengo:

  public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { fragmentTransaction.replace(R.id.fragmentContainer, fragment); } public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { fragmentTransaction.remove(fragment); } 

Esto es un problema en HeaderListView. Establecer un id en el listview ( listView.setId(1) ) a cualquier entero resuelve el problema.

  • Android: escucha para detectar cambios en las propiedades de una vista (por ejemplo, android: layout_marginTop)
  • Android: ¿puede tener un efecto de rizado cuyo color de estado predeterminado es transparente?
  • ¿Por qué requestLayout se llama directamente después de invalidar
  • Suavemente animar vista ocultar / mostrar en disposición lineal android
  • Animar las dimensiones superior e inferior de una vista
  • CircledImageView siempre tiene una imagen de rectángulo delante del círculo
  • Envoltura de texto uniforme en TextView
  • Cómo usar las vistas (Mes, Día, Semana) de Android Stock Calendar en una aplicación personalizada
  • Cómo hacer una vista en android con esquinas redondeadas
  • Actividad de Android con diseño transparente
  • Mostrar una ubicación geográfica mediante webview
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.