1

Итак, у меня есть фрагмент с ViewPager inside it. Я хочу изменить изображение макета внутри ViewPager через фрагмент.Change ImageView Drawable внутри ViewPager

Для этого я написал следующий код:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    v = inflater.inflate(R.layout.fragment_tab,container,false); //fragment layout 
    imageLayout = inflater.inflate(R.layout.view_image, null, false); //layout that's used in viewPager 
    theImage = (ImageView) imageLayout .findViewById(R.id.image); //getting the ImageView 

    ViewPager viewPager = (ViewPager) v.findViewById(R.id.resultImagesPager); 
    viewPager.setAdapter(new ResultImageAdapter(getActivity())); 
    } 

Самого код не врезаться моим приложением, но независимо от того, что я пишу, я не могу изменить растровое ImageView

+0

попробовать: theImage = (ImageView) v.findViewById (R.id .образ); –

+0

Это не сработает, так как 'R.id.image' объявлен в' view_image.xml', а не 'fragment_tab.xml' –

+0

, но, как писал Марлен, вы не раздуваете ViewPager здесь. Где вы его раздуваете? –

ответ

1

вы должны изменить рисуем внутри ViewPager адаптера.
В этом случае адаптер может выглядеть следующим образом:

private List<YourObject> mList; 
    // pass list of items into constructor 
    public CustomPagerAdapter(Context context, List<YourObject> list) { 
     mContext = context; 
     mList = list; 
    } 

    @Override 
    public Object instantiateItem(ViewGroup collection, int position) { 
     CustomPagerEnum customPagerEnum = CustomPagerEnum.values()[position]; 
     LayoutInflater inflater = LayoutInflater.from(mContext); 
     ViewGroup layout = (ViewGroup) inflater.inflate(customPagerEnum.getLayoutResId(), collection, false); 
     // get corresponding object and retrieve needed drawable 
     YourObject yourObject = mList.get(position); 
     ImageView theImage = (ImageView) layout.findViewById(R.id.image); 
     theImage.setImageDrawable(yourObject.getYourDravwable()); 

     collection.addView(layout); 
     return layout; 
    } 

    @Override 
    public int getCount() { 
     return mList.size(); 
    } 

...

и в вашем фрагменте:

List<YourObject> list = new ArrayList<>(); 
// add your objects or whatever 
list.add(new YourObject(name, drawable); 
viewPager.setAdapter(new ResultImageAdapter(getActivity(), list)); 
+0

У вас есть мой спасибо –

+0

добро пожаловать) –

0

в этой линии вы просто создать новый экземпляр R.layout.view_image, и это создает вид не добавил в любом контейнере

imageLayout = inflater.inflate(R.layout.view_image, null, false); 
+0

Итак, вы говорите, что я пишу код в неправильном месте? Я имею в виду, что сейчас мой код работает следующим образом: ViewPager содержит 'view_image.xml' с изображением по умолчанию -> Fragment.java обращается к' view_image.xml' и меняет изображение внутри него -> ViewPager теперь имеет 'view_image.xml' с изменено изображение. –

+0

v = inflater.inflate (R.layout.fragment_tab, контейнер, false); на этом надувнике вы ставите контейнер (второй параметр), и когда надуватель создаст макет из xml, он добавит этот макет в контейнер, но imageLayout вы создали без какого-либо контейнера, и этот макет просто создан в памяти, но не отображается на экране. – Marlen