2016-01-05 1 views
0

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

Например, у меня есть зеленый макет ViewPager, который заполняет весь экран.

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

Я могу изменить цвет макета на экране, но как изменить цвет оставшихся двух макетов, которые были созданы (без повторного создания их)?

Идея заключалась бы в том, что пользователь мог бы листать влево или вправо, а экран уже был бы зеленым.

Вот мой pager_layout

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#f0f0" 
    android:id="@+id/pager_layout"> 

</LinearLayout> 

Здесь я создал CustomAdapter класс и cick слушателя

public class CustomAdapter extends PagerAdapter { 

    @Override 
    public Object instantiateItem(ViewGroup collection, int position) { 


     LayoutInflater inflater = LayoutInflater.from(mContext); 
     ViewGroup pager_layout = (ViewGroup) inflater.inflate(R.layout.pager_layout, collection, false); 
     collection.addView(pager_layout); 

     setListener(pager_layout); 

     return pager_layout; 
    } 

    //etc... 
} 

Вот мой setListener(); метод

public void setListener(final View pager_layout){ 

    pager_layout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      l.setBackgroundColor(17170458); // purple 
     } 
    }); 
} 

ответ

0

Понял наконец

pager_layout.setTag(position); 
... 
View layout = collection.findViewWithTag(position+1); 
layout.setBackgroundColor(17170458); 

Я мог бы также сделать что-то более сложное, как модифицирующие взгляды внутри самого макета

View layout = collection.findViewWithTag(position+1); 
layout.findViewById(R.id.view1).setVisibility(View.GONE); 
layout.findViewById(R.id.view2).setVisibility(View.VISIBLE); 
0

Если вы знаете страницу вы можете использовать следующее решение. Предположим, вы хотите изменить страницу в позиции position в своем плеере.

Я советую вам продлить от FragmentPagerAdapter, а не PagerAdapter, так как вы можете вставлять все, что вам нужно, в пользовательский фрагмент ColorFragment. Этот фрагмент может определять способ setBackgroundColor(). Затем вы используете следующий вызов в своей основной деятельности:

ColorFragment colorFragment = (ColorFragment) customAdapter.getItem(position) 
colorFragment.setBackgroundColor(17170458); 

Если вы хотите изменить цвет текущего видимого фрагмента, вы можете установить позицию viewPager.getCurrentItem().