如何更新ViewPager当前实例化的视图

时间:2016-01-05 18:43:59

标签: android

我知道视图寻呼机必须同时实例化至少三个布局。我可以在屏幕上更新布局,但是如何更新其他两个布局?

例如,假设我有一个绿色的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 listener

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

2 个答案:

答案 0 :(得分:0)

如果您知道页面位置,则可以使用以下解决方案。我们假设您要修改视图寻呼机中position位置的页面。

我建议您从FragmentPagerAdapter而不是PagerAdapter进行扩展,然后在自定义片段ColorFragment中嵌入您需要的任何内容。该片段可以定义方法setBackgroundColor()。然后在主要活动中使用以下调用:

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

如果要修改当前可见片段的颜色,可以将位置设置为viewPager.getCurrentItem()

答案 1 :(得分: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);