ViewPagerIndicator внезапно не привязывается и не отображает содержимое пейджера

Это странная проблема.

Это будет ужасный вопрос, потому что у меня практически нет информации.

Около двух дней назад ViewPagerAdapter работал нормально. Я мог провести пальцем по экрану, и он переключался между представлениями, как определено адаптером.

Однако внезапно (не сам по себе, я уверен, что я что-то сделал) TitlePagerIndicator не привязывается к заголовкам и не отображает никакого содержимого. Не привязываясь, я имею в виду, что если я перетащу влево, заголовок будет занимать 3/4 экрана, а не привязываться к стороне и отображать следующую страницу (скриншот ниже).

Я отлаживаю и создаю экземпляр элемента, и возвращается правильное представление.

Однако, когда я открываю приложение, я получаю множество предупреждений, подобных этим: VFY: невозможно разрешить виртуальный метод 3015: Landroid/widget/LinearLayout;.getAlpha ()F VFY: невозможно разрешить прямой метод 3011: Landroid/widget /Линейный макет;. (Landroid/content/Context;Landroid/util/AttributeSet;I)V VFY: невозможно разрешить виртуальный метод 2965: Landroid/widget/FrameLayout;.setAlpha (F)V

Я предполагаю, что это проблема с моим импортом, но все компилируется просто отлично, у меня есть ViewPagerIndicator в качестве проекта библиотеки, а также Sherlock.

Вот мой код адаптера:

public class ViewPagerAdapter extends PagerAdapter implements TitleProvider {

private static String[] titles = new String[] { 
    "My Klinks", 
    "Received Klinks"
    };

private final Context context;

public ViewPagerAdapter(Context context) {
    this.context = context;
}

public String getTitle(int position) {
    return titles[position];
}

@Override
public int getCount() {
    return titles.length;
}

@Override
public Object instantiateItem(View pager, int position) {
    TextView t = new TextView(context);
    t.setText("WheeeE");
    return t;
}

@Override
public void destroyItem(View pager, int position, Object view) {
    ((ViewPager) pager).removeView((TextView) view);
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return view.equals(object);
}

@Override
public void finishUpdate(View view) {
}

@Override
public void restoreState(Parcelable p, ClassLoader c) {
}

@Override
public Parcelable saveState() {
    return null;
}

@Override
public void startUpdate(View view) {
}
}

И вот мой код активности:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate( savedInstanceState );
    setContentView( R.layout.main );

    // set up the slidey tabs
    ViewPagerAdapter adapter = new ViewPagerAdapter( this );
    ViewPager pager = (ViewPager)findViewById( R.id.viewpager );
    TitlePageIndicator indicator = (TitlePageIndicator)findViewById( R.id.indicator );
    pager.setAdapter( adapter );
    indicator.setViewPager( pager );

    // set up the action bar
    final ActionBar ab = getSupportActionBar();

    ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.ad_action_bar_gradient_bak));
}

Индикатор заголовка не привязывается


person Rev Tyler    schedule 04.05.2012    source источник
comment
ну для начала, вы пробовали очистить проект и перезапустить eclipse?   -  person Alex Lockwood    schedule 05.05.2012
comment
Много раз. Пару дней назад у меня возникла проблема, когда мои банки поддержки Android внезапно не совпадали между проектами. Поэтому я обновил их всех последней версией из исходной папки Android. Я почти уверен, что именно тогда проблема началась. Однако, когда я переключил их все обратно на тот, который поставляется в исходном коде git ViewPagerIndicator, никаких игральных костей. Я попробую использовать тот, который включен в исходный код git Sherlock, и посмотрю, даст ли он что-нибудь. Может ли использование другой версии пакета поддержки вызвать проблему?   -  person Rev Tyler    schedule 05.05.2012
comment
Да, похоже, это может вызвать проблемы. Я не уверен, что очень вероятно, что вы получите здесь полезный ответ, если это так, лол... Я не вижу ничего плохого в вашем коде. Это должно быть проблемой с вашим проектом.   -  person Alex Lockwood    schedule 05.05.2012


Ответы (2)


Если у кого-то возникла такая же проблема:

В instanceView: не забудьте прикрепить свой новый вид к ViewPager:

@Override
public Object instantiateItem(View pager, int position) {
    TextView t = new TextView(context);
    t.setText("WheeeE");
    ((ViewPager)pager).addView(t);
    return t;
}

Текущая версия instanceItem получает ViewGroup вместо View, решение должно быть таким же.

person Kuno    schedule 04.06.2012
comment
Я принимаю этот ответ, предполагая, что он правильный :) Я не могу проверить, потому что изменил свой метод. Однако, похоже, это решило бы мою проблему. - person Rev Tyler; 08.06.2012

Что ж, после пары дней стука головой о стену я пришел к выводу, что проблема была в моем ViewPagerAdapter.

Я просто создал динамический фрагмент и вместо этого создал подкласс FragmentPagerAdapter, и теперь он отлично работает...

person Rev Tyler    schedule 05.05.2012