Android 如何在视图寻呼机中添加多个内容?

Android 如何在视图寻呼机中添加多个内容?,android,android-viewpager,swipe,Android,Android Viewpager,Swipe,您好,我正在使用android应用程序。我已经使用视图寻呼机创建了一个可切换视图,该视图只包含右端的图像。现在我想在同一个页面查看器中为每个视图添加一些文本视图和按钮。如何在页面查看器中添加文本视图和按钮??? 这是我的密码 Swipe_adapter.java public class Swipe_adapter extends PagerAdapter { Context context; private int[] GalImages = new int[] { R.dra

您好,我正在使用android应用程序。我已经使用视图寻呼机创建了一个可切换视图,该视图只包含右端的图像。现在我想在同一个页面查看器中为每个视图添加一些文本视图和按钮。如何在页面查看器中添加文本视图和按钮??? 这是我的密码

Swipe_adapter.java

  public class Swipe_adapter extends PagerAdapter {
  Context context;
  private int[] GalImages = new int[] {
  R.drawable.app1,
  R.drawable.app2,
  R.drawable.gosms
  };

    ArrayList<HashMap<String,String>> list=new ArrayList<HashMap<String, String>>();
    Map map=new HashMap ();

   String[] str=new String[]
                        {
         "app1","app2","app3"

                        };

   Swipe_adapter(Context context){
   this.context=context;
  }
  @Override
   public int getCount() {
    return GalImages.length;
   }

  @Override
  public boolean isViewFromObject(View view, Object object) {
    return view == ((ImageView) object);

  }

  @Override
  public Object instantiateItem(ViewGroup container, int position) {
  ImageView imageView = new ImageView(context);
  int padding = context.getResources().getDimensionPixelSize(R.dimen.padding_medium);
  imageView.setPadding(padding, padding, padding, padding);
  imageView.setScaleType(ImageView.ScaleType.FIT_END);
  imageView.setImageResource(GalImages[position]);
  ((ViewPager) container).addView(imageView, 0);
  return imageView;
  }

  @Override
   public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((ImageView) object);
  }
  }

您可以创建包含图像、按钮和文本的布局。然后在寻呼机适配器中为该布局充气

mylayout.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:id="@+id/tv_myText"
        style="?android:textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/imgMap"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center" />


    <Button
        android:id="@+id/btnTopup"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />        

</RelativeLayout>
上下文可以通过将其从调用活动传递到PagerAdapter构造函数中来获得


希望这能有所帮助。

我在
ViewPager
中使用Mike Ortiz(用于缩放功能)时遇到了同样的问题(我只能获取一个主视图,在本例中是扩展的
ImageView
),并制定了一个简洁的解决方案。我想在用户浏览的一系列地图中添加一些动态文本,添加“Map 3/13”等作为覆盖。我通过实例化
ViewPager
适配器外部的额外视图(
TextView
),然后向更新TextView的ViewPager对象添加一个
onpagechangeelistener
,解决了这个问题

首先,我设置XML以获取两个视图(相对视图允许文本覆盖图像):

最后,在设置
TextView
ViewPager
视图后,我用onCreate方法创建了监听器:

vPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        private int currentPage;

        @Override
        public void onPageSelected(int pos) {
            currentPage = pos;
            StringBuilder sb = new StringBuilder();
            sb.append("Map ");
            sb.append((pos + 1));
            sb.append("/");
            sb.append(allMaps.size());
            myTextView.setText(sb);
        }

        public final int getCurrentPage() {
            return currentPage;
        }
});

现在,当我浏览地图时,文本视图也会更新。你不能在adapter
InstanceItem
方法中执行此操作,因为位置似乎不能反映你在通过滑动更新页面时所处的位置(不知道为什么!)…

因此,对于每次滑动,我需要创建单独的xml,正如你所说,事实上,我希望像上面的代码一样将这些内容加载到单个xml中。如果每个页面都有相同的布局,如我的示例1 textview、1 imageview和1 button中所示,那么对每个页面使用相同的xml,只需根据位置参数为控件分配不同的值。否则,如果每个页面的布局不相同,那么很遗憾,是的,您必须为每个页面创建一个布局。
public Object instantiateItem(ViewGroup container, int position) {

    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    View myView = inflater.inflate(R.layout.mylayout, null);
        //Access yout textView, ImageView, Button like below
    TextView myText = (TextView)myView.findViewById(R.id.tv_myText);

    return myView;
  }
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayoutPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<org.mypackagename.ExtendedViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true" />

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@id/viewpager"
    android:layout_alignLeft="@id/viewpager"
    android:layout_alignRight="@id/viewpager"
    android:layout_alignTop="@id/viewpager"
    android:layout_gravity="right"
    android:layout_weight="1.0"
    android:gravity="right"
    android:paddingRight="5dip"
    android:paddingTop="5dp"
    android:text=""
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:textStyle="bold" />

</RelativeLayout>
public View instantiateItem(ViewGroup container, int pos) {
        TouchImageView img = new TouchImageView(container.getContext());
        img.setImageDrawable((Drawable) imageHolder.get(pos));
        container.addView(img, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
        return img;
}
vPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        private int currentPage;

        @Override
        public void onPageSelected(int pos) {
            currentPage = pos;
            StringBuilder sb = new StringBuilder();
            sb.append("Map ");
            sb.append((pos + 1));
            sb.append("/");
            sb.append(allMaps.size());
            myTextView.setText(sb);
        }

        public final int getCurrentPage() {
            return currentPage;
        }
});