在android中强制渲染ViewPager

时间:2014-01-07 11:23:09

标签: android android-viewpager

在我的Android应用中,我有一个Button,可以通过更改ViewPager中存储的颜色来更改SharedPreference背景的颜色。

@Override
public void onClick(View v) {
    sPref=getPreferences(MODE_PRIVATE);
    int color=sPref.getInt("BACKGROUND", Color.DKGRAY);

    if (color==Color.DKGRAY){
        SharedPreferences.Editor sEdit= sPref.edit();
        sEdit.putInt("BACKGROUND", Color.RED);
        sEdit.commit();
    }
    else{
        SharedPreferences.Editor sEdit= sPref.edit();
        sEdit.putInt("BACKGROUND", Color.DKGRAY);
        sEdit.commit(); 
    }
}

我的ViewPager中的背景颜色已经改变了

@Override
public Object instantiateItem(ViewGroup container, int position) {
    LayoutInflater inflater = (LayoutInflater) container.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View page= inflater.inflate(R.layout.card , null);
    TextView tc= (TextView) page.findViewById(R.id.txtCard);
    tc.setText("Card "+position);
    tc.setBackgroundColor(sPref.getInt("BACKGROUND", Color.DKGRAY));

    ((ViewPager)container).addView(page,0);

    return page;
}

我的问题:当我更改ViewPager的背景颜色时,由于我更改背景时当前页面和2页已加载,因此它们不会显示更改在背景中。所以我想强制渲染它们。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

您可以: 获取已加载页面的视图并自行设置背景。 (使用:YOUR_ADAPTER.getItem(position)

或者,只需尝试: 适配器上的notifyDataSetChanged

答案 1 :(得分:0)

请注意,您实际上正在更改寻呼机托管的单个页面的bg颜色,而不是ViewPager本身。如果您想更改ViewPager的颜色,只需设置其颜色并确保您的页面(卡片)具有透明背景;或者,听取Givi的建议并致电notifyDataSetChanged()并在适配器中应用更新的bg颜色。