Android:如何更改使用ViewPager创建的项目?

时间:2011-12-25 15:34:54

标签: android android-viewpager

我正在重建我的应用程序设计,并希望使用ViewPager。实现不是问题,但我无法弄清楚如何在页面内更改我的TextViews。谷歌搜索的时间也没有帮助我。也许你可以帮助我。我只需要知道如何更改textViews的文本,文本颜色和内容。 main.xml包含我的ViewPager,speiseplan.xml包含ScrollView中的TextViews,每个都带有一个id。

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和一堆TextView。

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;
    }

}
}

现在我如何访问我的TextView并更改它们。如何将用户sqiping检测到另一个页面。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为你必须在instantiateItem()方法中更改TextViews。它的工作方式几乎与其他适配器中的getView()方法类似。

PagerAdapter不会像其他适配器(如BaseAdapter或ArrayAdapter)那样自动回收视图。您可能希望自己实施回收。看看the documentation,它提供了一些关于如何做到这一点的提示。

要检测滑动,您可以使用OnPageChangeListener界面。