我知道视图寻呼机必须同时实例化至少三个布局。我可以在屏幕上更新布局,但是如何更新其他两个布局?
例如,假设我有一个绿色的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
}
});
}
答案 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);