Android: Viewpager или Viewflipper? - PullRequest
       5

Android: Viewpager или Viewflipper?

1 голос
/ 29 января 2012

В настоящее время я реализовал viewpager, который плавно перелистывает три разных макета - все работает хорошо.Проблема возникает, когда я пытаюсь получить доступ к элементам в их макетах, я не знаю, с чего начать?Может ли viewflipper сделать это?Я так полагаю, потому что это делается в marketpalce и т. Д.

Активность:

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

            //pagerviwer

            MyPagerAdapter adapter = new MyPagerAdapter();
            ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager);
            myPager.setAdapter(adapter);
            myPager.setCurrentItem(1); 

PageAdapter:

class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
        return 3;
    }

    public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        switch (position) {
        case 0:
            resId = R.layout.training_topics;
            break;
        case 1:
            resId = R.layout.behaviour_topics;

            break;
        case 2:
            resId = R.layout.tricks_topics;
            break;
        }

        View v = inflater.inflate(resId, null);

        ((ViewPager) collection).addView(v, 0);

        return v;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);

    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);

    }

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

Пример: Скажите, например, если я пыталсяполучить доступ к ImageView внутри traning_topics.xml?Выполнение этого через основное действие просто приводит к сбою.

1 Ответ

4 голосов
/ 29 января 2012

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

Android ViewPager findViewById не работает - Всегда возвращает ноль

Похоже, что сначала вы должны накачать представление, которое хотите внутри instantiateItem(View collection, int position)метод.Затем вы должны инициализировать его, вызвав findViewById.

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

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

...