Android: как изменить элементы, созданные с помощью ViewPager? - PullRequest
2 голосов
/ 25 декабря 2011

Я перестраиваю дизайн своего приложения и хотел бы использовать ViewPager для него. Реализация была не совсем проблемой, но я не могу понять, как изменить мои TextViews внутри страниц. Часы гугл мне тоже не помогли. Возможно ты можешь помочь мне. Мне просто нужно знать, как изменить текст, цвет текста и прочее в моих текстовых представлениях. main.xml включает мой ViewPager, а speiseplan.xml включает TextViews внутри ScrollView, каждый с идентификатором.

main.xml:

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

    <android.support.v4.view.ViewPager
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:id="@+id/awesomepager" />

</LinearLayout>

Я не буду писать весь файл speiseplan.xml здесь, поскольку он просто включает в себя ScrollView и несколько TextViews.

Реализация на Java выглядит следующим образом:

public class Speiseplan extends Activity {

    private ViewPager myPager;
private static int NUM_VIEWS = 14;
private MyPagerAdapter myAdapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    myAdapter = new MyPagerAdapter();
    myPager = (ViewPager) findViewById(R.id.awesomepager);
    myPager.setAdapter(myAdapter);
}

private class MyPagerAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return NUM_VIEWS;
        }


        @Override
        public Object instantiateItem(View collection, int position){
            LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View view = inflater.inflate(R.layout.speiseplan, null);

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

            return view;
        }

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

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == ((View) arg1);
        }

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

}
}

Теперь, как я могу получить доступ к своим TextViews и изменить их. И как я могу обнаружить пользователя, переходящего на другую страницу.

Спасибо за помощь!

1 Ответ

1 голос
/ 25 декабря 2011

Я думаю, вам придется изменить TextViews в методе instantiateItem(). Он работает почти так же, как метод getView() в других адаптерах.

PagerAdapter не автоматически перерабатывает представления, как другие адаптеры, такие как BaseAdapter или ArrayAdapter. Возможно, вы захотите осуществить переработку самостоятельно. Взгляните на документацию , в которой даются советы о том, как это сделать.

Чтобы обнаружить пролистывание, вы можете использовать интерфейс OnPageChangeListener .

...