2014-01-08 3 views
3

У меня есть viewpager в моем main_layout. Пейджер представления содержит только ImageView, обернутый RelativeLayoutКак динамически добавлять изображение в viewpager, содержащий изображение?

То, что я хотел бы сделать, - это когда пользователь нажимает на кнопку, он добавит изображение в этот конкретный просмотрщик.

Я нашел этот ответ здесь, в stackoverflow (который, я думаю, имеет отношение к моему вопросу), однако я полностью потерял этот код.

Dynamically Adding View to viewpager

До сих пор это мой код:

MainActivity.Java

private PagerAdapter pAdapter; 
private ViewPager photoPager; 

... 

pAdapter = new GalleryPagerAdapter(getApplicationContext()); 
photoPager.setAdapter(pAdapter); 

GalleryPagerAdapter.java 

public class GalleryPagerAdapter extends PagerAdapter{ 

    private final Context context; 
    LayoutInflater inflater; 
    private final int[] GalImages = new int[] { 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher, 
     R.drawable.ic_launcher 
    }; 

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

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

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

    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
     ImageView imageView = new ImageView(context); 
     int padding = 10; 
     imageView.setPadding(padding, padding, padding, padding); 
     imageView.setScaleType(ImageView.ScaleType.MATRIX); 
     imageView.setImageResource(GalImages[position]); 
     container.addView(imageView, 0); 
     return imageView; 
    } 

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

Это мнение, что я хотел бы добавить динамически

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:padding="10dp" > 
    <ImageView 
     android:id="@+id/photo_thumb" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="#000000" 
     android:scaleType="fitXY" 
     android:padding="0dp" /> 
</RelativeLayout> 

И это мой MainActivity, где мой ViewPager существует

MainActivity.xml 
<LinearLayout 
    android:id="@+id/bannerLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.4" 
    android:layout_margin="0dip" 
    android:orientation="vertical"> 
    <android.support.v4.view.ViewPager 
     android:id="@+id/photoPager" 
     android:layout_width="fill_parent" 
     android:layout_height="125dp" 
     android:background="#4F4E4F"/> 
</LinearLayout> 

Так что мой вопрос, как я улучшить код, я использую, так что я могу динамически добавлять новое изображение к моему ViewPager

пса: На опорной линии (которые я твердо верю, отношение к моему вопросу), я полностью потерял в этой части:

// Create an initial view to display; must be a subclass of FrameLayout. 
FrameLayout v0 = (FrameLayout) inflater.inflate (R.layout.one_of_my_page_layouts, null); 
pagerAdapter.addView (v0, 0); 

Что такое инфлятор ?? Для чего я должен его инициализировать?

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

+0

вы хотели бы добавить изображения с SD-карты? –

+0

Да, пользователь должен иметь возможность просматривать информацию из своей телефонной галереи. – Jeremy

+0

ОК, это будет некоторое время для разработки ответа для вас. –

ответ

3

Inflater предназначен для создания объекта View из вашего xml-макета.

Так что, если ваш lauout R.layout.one_of_my_page_layouts:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center" 
    android:padding="10dp" > 
    <ImageView 
     android:id="@+id/photo_thumb" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:background="#000000" 
     android:scaleType="fitXY" 
     android:padding="0dp" /> 
</RelativeLayout> 

Inflater будет делать что-то вроде этого (просто пример)

ImageView iv=new ImageView(context); 
RelativeLayout rl=new RelativeLayout(context); 
rl.add(iv) 
return rl; 

Просто минимальный код, но Inflater установит все Params Раскладка Что ж.

Так что вместо создания динамического представления, как вы делаете в instantiateItem, если у вас есть xml, вы можете просто раздуть его и получить объект типа.

Таким образом, вы можете изменить instantiateItem к:

public Object instantiateItem(ViewGroup container, int position) { 
     RelativeLayout v0 = (RelativeLayout) inflater.inflate (R.layout.one_of_my_page_layouts, null); 

     ImageView imageView = vo.findViewById(R.id.photo_thumb); 
     int padding = 10; 
     imageView.setPadding(padding, padding, padding, padding); 
     imageView.setScaleType(ImageView.ScaleType.MATRIX); 
     imageView.setImageResource(GalImages[position]); 
     container.addView(v0, 0); 
     return v0; 
    } 
+0

Спасибо vipul, позвольте мне сначала попробовать ваше решение .. – Jeremy

Смежные вопросы