No puedo encontrar FragmentPagerAdapter dentro de Android.App.

No quiero usar el Fragmento de Android.Apoyo.V4.Aplicación, ya que mi objetivo API es
14 y más (Android 4.0 y superior). Así, sólo quiero usar llanura de Android.App.Fragmentos,
y allí las clases asociadas.

Yo sólo la he encontrado en Android.Apoyo.V4.La aplicación, pero esto no es suficiente
para mí b/c estoy tratando de usar Android.App.Del fragmento (no Android.Apoyo.V4.App.Del fragmento)
y no relacionadas con las clases dentro de Android.Aplicación (no Android.Apoyo.V4.De la aplicación), y mi código no
compilar si me derivan mi buscapersonas de FragmentPagerAdapter si su de la biblioteca de Compatibilidad,
debido a que el tipo resultante de desajuste entre Android.App y Android.Apoyo.V4.App.

Al igual que con el caso aquí No se puede convertir a android.app.Fragmento, existe un «normal» pager (PagerAdapter) de clase I se debe utilizar en
lugar de FragmentPagerAdapter o algo (tal y como se derivan de la Actividad normal, y
no FragmentActivity, cuando se dirigen a la API de 11 o superior).

Aquí está el código de ejemplo que estoy trabajando con el (la FragmentPagerSupport.cs archivo dentro de la Support4.sln solución de la MonoDroid ejemplos que se encuentran en https://github.com/xamarin/monodroid-samples/tree/master/Support4).

He comentado las líneas que se hace referencia en Android.Apoyo.V4.De la aplicación y los reemplazó con
el código que hace referencia a Android.App. No hay FramePagerAdapter fuera de Android.Apoyo.V4.App que he podido encontrar, y yo realmente lo necesitan).

Gracias.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
//using Android.Support.V4.App;
//using Android.Support.V4.View;
namespace Support4
{
[Activity (Label = "@string/fragment_pager_support")]
[IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
//public class FragmentPagerSupport : FragmentActivity
public class FragmentPagerSupport : Activity
{
const int NUM_ITEMS = 10;
MyAdapter adapter;
ViewPager pager;
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView(Resource.Layout.fragment_pager);
//adapter = new MyAdapter(SupportFragmentManager);
adapter = new MyAdapter(FragmentManager);
pager = FindViewById<ViewPager>(Resource.Id.pager);
pager.Adapter = adapter;
var button = FindViewById<Button>(Resource.Id.goto_first);
button.Click += (sender, e) => {
pager.CurrentItem = 0;  
};
button = FindViewById<Button>(Resource.Id.goto_last);
button.Click += (sender, e) => {
pager.CurrentItem = NUM_ITEMS - 1;
};
}
//?????????????????????????????????????????????????
//- where is FragmentPagerAdapter 
//?????????????????????????????????????????????????
protected class MyAdapter : FragmentPagerAdapter 
{
public MyAdapter(FragmentManager fm) : base(fm)
{
}
public override int Count {
get {
return NUM_ITEMS;
}
}
public override Fragment GetItem (int position)
{
return new ArrayListFragment(position);
}
}
protected class ArrayListFragment : ListFragment
{
int num;
public ArrayListFragment()
{
}
public ArrayListFragment(int num)
{
var args = new Bundle();
args.PutInt("num", num);
Arguments = args;
}
public override void OnCreate (Bundle p0)
{
base.OnCreate (p0);
num = Arguments != null ? Arguments.GetInt("num") : 1;
}
public override View OnCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
var v = inflater.Inflate(Resource.Layout.fragment_pager_list, container, false);
var tv = v.FindViewById<TextView>(Resource.Id.text);
tv.Text = "Fragment #" + num;
return v;
}
public override void OnActivityCreated (Bundle p0)
{
base.OnActivityCreated (p0);
ListAdapter = new ArrayAdapter<string>(Activity, Android.Resource.Layout.SimpleListItem1, Cheeses.cheeseStrings);
}
public override void OnListItemClick(ListView l, View v, int position, long id) {
Console.WriteLine ( "Item clicked: " + id);
}
}
}
}
  • Hay uno que está en android.support.v13.app.FragmentPagerAdapter. No estoy segura si voy a ayudar, pero…
  • PearsonArtPhoto No estoy seguro ya que no hay Android.Apoyo.V13.Vista del espacio de nombres (en MonoDroid de todos modos). Yo prefiero no utilizar el apoyo de la biblioteca a todos, pero no creo que su posible todavía.
  • Parece ViewPager sólo existe en la biblioteca de compatibilidad así…
  • developer.android.com/reference/android/support/v4/view/… El Resumen de la Clase de la sección resume bastante bien esta situación – «Nota: esta clase está actualmente bajo principios de diseño y desarrollo. El API es probable que cambie en las actualizaciones posteriores de la biblioteca de compatibilidad, lo que requiere cambios en el código fuente de las aplicaciones compiladas para la versión más reciente.»
  • Otro extracto de la documentación developer.android.com/tools/extras/support-library.html «El apoyo de la biblioteca para la v4 proporciona acceso a varias clases introducido con Android 3.0 y más allá, además de alguna versión actualizada de las clases existentes, e incluso algunas APIs que actualmente no existen en la plataforma Android». Sin embargo, ¿por qué iban a dejar nunca de una pieza tan importante del Fragmento «API» en la biblioteca de soporte exclusivamente, donde el resto de lo que existe fuera de si. Tal vez un descuido ?
  • Yup, que fue el que en realidad se corrigió. Gracias por la sugerencia.
  • Sí. Si su minSdk es mayor que 11 debe usar android.apoyo.v13 .

InformationsquelleAutor samis | 2012-11-21

4 Comentarios

  1. 201

    Hay uno que está en android.apoyo.v13.app.FragmentPagerAdapter, que debe hacer lo que usted quiere que haga. Es un FragmentPagerAdapter por falta de apoyo de los fragmentos.

    Android Studio Instalación

    Agregue por favor siga Gradle dependencias

    dependencies {
    compile 'com.android.support:support-v13:+'
    }
    • Es un lío, en un sentido que no se puede utilizar anidada fragmentos y getChildFragmentManager() en el apoyo lib 13.
    • el uso de compilación ‘com.android.soporte:soporte-v13:21.0.+’ para gradle construir
    • mi android studio no resolver import android.support.v13.app.FragmentPagerAdapter; alguna idea? seguro que ya han añadido compilar ‘com.android.soporte:soporte-v13:23.1.1’ a gradle
    • support:support-v13 tiene conflictos con support:design en mi caso
    • fyi: actualmente v13 incluye todos v4 dependencias, por lo que desde una dependencia de ahorro punto de vista no hay ningún beneficio
    • Pero ahora está en desuso en la api de 27 -> para utilizar la versión v4 de nuevo. Luego tenemos el problema de nuevo, con no utilizar ninguno de apoyo lib Fragmento

  2. 17

    Ugh, usted sólo tiene que utilizar el FragmentPagerAdapter de la V13 de la biblioteca de soporte

    Android.Support.V13.App.FragmentPagerAdapter

    A continuación, todos los demás Fragmento de clases puede ser utilizado a partir de la «normal» bibliotecas o espacios de nombres, con la excepción de ViewPager, pero que no es gran cosa.


    Aquí se muestra un ejemplo de integridad (modificado «Support4» ejemplo de https://github.com/xamarin/monodroid-samples/):

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Util;
    using Android.Views;
    using Android.Widget;
    using Java.Lang;
    using Android.Support.V4.View;
    using Fragment = Android.App.Fragment;
    namespace Support4
    {
    [Activity (Label = "@string/fragment_pager_support")]
    [IntentFilter (new[]{Intent.ActionMain}, Categories = new[]{ "mono.support4demo.sample" })]
    public class FragmentPagerSupport : Activity
    //public class FragmentPagerSupport : FragmentActivity
    {
    const int NUM_ITEMS = 4;
    protected MyAdapter _pagerAdapter;
    protected ViewPager _viewPager;
    protected override void OnCreate (Bundle bundle)
    {
    base.OnCreate (bundle);
    SetContentView(Resource.Layout.fragment_pager);
    List<Fragment> fragments = new List<Fragment>();
    //*** MonoDroid 4.2.7 letter case bug *** make's first letter lower.
    //string typeName = typeof(Fragment1).FullName;
    string typeName = "support4." + typeof(Fragment1).Name;
    fragments.Add(Fragment.Instantiate(this, typeName));
    fragments.Add(Fragment.Instantiate(this, typeName));
    fragments.Add(Fragment.Instantiate(this, typeName));
    fragments.Add(Fragment.Instantiate(this, typeName));
    //adapter = new MyAdapter(SupportFragmentManager);
    _pagerAdapter = new MyAdapter(FragmentManager, fragments);
    _viewPager = FindViewById<ViewPager>(Resource.Id.view_pager);
    _viewPager.Adapter = _pagerAdapter;
    }
    public override bool OnTouchEvent(MotionEvent e)
    {
    return base.OnTouchEvent(e);
    }
    protected class MyAdapter : Android.Support.V13.App.FragmentPagerAdapter
    {
    private List<Fragment> _fragments;
    public override Java.Lang.Object  InstantiateItem(View p0, int p1)
    {
    return base.InstantiateItem(p0, p1);
    }
    public MyAdapter(Android.App.FragmentManager fm)
    : base(fm)
    {
    }
    //public MyAdapter(Android.Support.V4.App.FragmentManager fm, List<Android.Support.V4.App.Fragment> fragments)
    //   : base(fm)
    public MyAdapter(FragmentManager fm, List<Fragment> fragments)
    : base(fm)
    {
    _fragments = fragments;
    }
    public override int Count {
    get {
    return NUM_ITEMS;
    }
    }
    //public override Android.Support.V4.App.Fragment GetItem(int p0)
    public override Fragment GetItem(int p0)
    {
    return _fragments[p0];
    }
    public override float GetPageWidth(int p0)
    {
    //return base.GetPageWidth(p0);
    //base.GetPageWidth(p0);
    return (float)(0.5f);
    }
    }
    }
    //public class Fragment1 : Android.Support.V4.App.Fragment
    public class Fragment1 : Fragment
    {
    int num;
    private static int _colorIndex = 0;
    private static Android.Graphics.Color[] _colors = new[] { Android.Graphics.Color.Aqua, Android.Graphics.Color.DarkViolet,
    Android.Graphics.Color.Coral, Android.Graphics.Color.Bisque};
    public Fragment1()
    {
    }
    public Fragment1(int num)
    {
    var args = new Bundle();
    args.PutInt("num", num);
    Arguments = args;
    }
    public override void OnCreate(Bundle p0)
    {
    base.OnCreate(p0);
    num = Arguments != null ? Arguments.GetInt("num") : 1;
    }
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
    View v = inflater.Inflate(Resource.Layout.aaaaa, container, false);
    TextView tv = v.FindViewById<TextView>(Resource.Id.text);
    tv.Text = "# " + _colorIndex;
    tv.SetBackgroundColor(_colors[_colorIndex++]);
    return v;
    }
    public override void OnActivityCreated(Bundle p0)
    {
    base.OnActivityCreated(p0);
    }
    }
    }

    <?xml version="1.0" encoding="utf-8"?>
    <!-- Copyright (C) 2010 The Android Open Source Project
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    -->
    <!-- Top-level content view for the simple fragment sample. -->
    <LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:padding="4dip"
    android:layout_width="match_parent" android:layout_height="match_parent">
    <!--android:gravity="center_horizontal"-->
    <android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="700dip"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:background="#FFCCFFFF">
    <!--android:layout_width="match_parent"-->
    </android.support.v4.view.ViewPager>
    </LinearLayout>

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/screen_container"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView android:id="@+id/text"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:gravity="center_vertical|center_horizontal"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/hello_world"
    android:background="#FF335555"/>
    </LinearLayout>
    • Es un lío, en un sentido que no se puede utilizar anidada fragmentos y getChildFragmentManager() en el apoyo lib 13.
  3. 2

    Agregar este dependecy a la gradle dependencias:

    compile 'com.android.support:support-v13:+'

    Y uso android.apoyo.v13.app.FragmentPagerAdapter como este (yo simplemente modificado la demo oficial del proyecto en android studio: archivo → nuevo → nuevo proyecto → siguiente → siguiente → pestañas actividad → siguiente → finalizar):

    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.support.v13.app.FragmentPagerAdapter;
    import com.google.android.gms.maps.MapFragment;
    /** A simple FragmentPagerAdapter that returns a MapFragment and a PreferenceFragment. */
    public class MainActivityAdapter extends FragmentPagerAdapter {
    private MapFragment mapFragment;
    private PreferencesFragment preferencesFragment;
    public MainActivityAdapter(FragmentManager fm) {
    super(fm);
    mapFragment = MapFragment.newInstance();
    preferencesFragment = new PreferencesFragment();
    }
    @Override
    public int getCount() {
    return 2;
    }
    @Override
    public Fragment getItem(int position) {
    switch (position) {
    case 0:
    return mapFragment;
    case 1:
    return preferencesFragment;
    default:
    return null;
    }
    }
    }
  4. 0

    Tenido el mismo problema. Mi solución fue copiar el código de android.apoyo.v4.app.FragmentPagerAdapter, a continuación, cambie el importado Fragmento de la clase para android.app.Fragmento. Después de hacer otras pequeñas adaptaciones para eliminar todos los errores. Para mi sorpresa, funciona perfectamente.
    OMI esto es más simple que la adición de un apoyo de la biblioteca que usted realmente no necesita.

    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.app.FragmentTransaction;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.view.View;
    import android.view.ViewGroup;
    /**
    * PagerAdapter for ViewPager that is compatible with android.app.Fragment.
    */
    abstract class FragmentPagerAdapter extends PagerAdapter {
    private final FragmentManager mFragmentManager;
    private FragmentTransaction mCurTransaction = null;
    private Fragment mCurrentPrimaryItem = null;
    /**
    * Returns a unique id for the fragment on the given position.
    * For example this can be the view id that is used on the page's fragment.
    * @param position The page index
    * @return An id that is unique with respect to the pages in the adapter.
    */
    abstract long getItemId(int position);
    /**
    * Returns the fragment for the given page index.
    * @param position The page index
    * @return The fragment
    */
    abstract Fragment getItem(int position);
    public FragmentPagerAdapter(FragmentManager fragmentManager) {
    super();
    mFragmentManager = fragmentManager;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
    if (mCurTransaction == null) {
    mCurTransaction = mFragmentManager.beginTransaction();
    }
    final long itemId = getItemId(position);
    //Do we already have this fragment?
    String name = makeFragmentName(container.getId(), itemId);
    Fragment fragment = mFragmentManager.findFragmentByTag(name);
    if (fragment != null) {
    mCurTransaction.attach(fragment);
    } else {
    fragment = getItem(position);
    mCurTransaction.add(container.getId(), fragment,
    makeFragmentName(container.getId(), itemId));
    }
    if (fragment != mCurrentPrimaryItem) {
    fragment.setMenuVisibility(false);
    }
    return fragment;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
    if (mCurTransaction == null) {
    mCurTransaction = mFragmentManager.beginTransaction();
    }
    mCurTransaction.detach((Fragment) object);
    }
    @SuppressWarnings("ReferenceEquality")
    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
    Fragment fragment = (Fragment)object;
    if (fragment != mCurrentPrimaryItem) {
    if (mCurrentPrimaryItem != null) {
    mCurrentPrimaryItem.setMenuVisibility(false);
    }
    if (fragment != null) {
    fragment.setMenuVisibility(true);
    }
    mCurrentPrimaryItem = fragment;
    }
    }
    @Override
    public void finishUpdate(ViewGroup container) {
    if (mCurTransaction != null) {
    mCurTransaction.commitAllowingStateLoss();
    mCurTransaction = null;
    }
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
    return ((Fragment)object).getView() == view;
    }
    @Override
    public Parcelable saveState() {
    return null;
    }
    @Override
    public void restoreState(Parcelable state, ClassLoader loader) {
    }
    private static String makeFragmentName(int viewId, long id) {
    return "android:switcher:" + viewId + ":" + id;
    }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here