Java 你能更新GridViewPager的背景吗?

Java 你能更新GridViewPager的背景吗?,java,android,android-adapter,wear-os,Java,Android,Android Adapter,Wear Os,在Adroid Wear应用程序中,我有一个GridViewPager和一个自定义FragmentGridPagerAdapter。当我启动应用程序时,我会实例化我的adpater,当我的手持应用程序提供新数据时,我会更新它的内容 由于每次切换到新页面时都会调用方法getFragment,因此不同页面的文本会正确更新。相反,getBackground似乎只有在实例化适配器时才被调用,这意味着我无法更新页面的背景:/ 我能告诉适配器如何更新所有(或理想情况下只更新一个)背景吗 ---编辑--- 这

在Adroid Wear应用程序中,我有一个
GridViewPager
和一个自定义
FragmentGridPagerAdapter
。当我启动应用程序时,我会实例化我的adpater,当我的手持应用程序提供新数据时,我会更新它的内容

由于每次切换到新页面时都会调用方法
getFragment
,因此不同页面的文本会正确更新。相反,
getBackground
似乎只有在实例化适配器时才被调用,这意味着我无法更新页面的背景:/

我能告诉适配器如何更新所有(或理想情况下只更新一个)背景吗

---编辑---

这是我的密码: 我的
GridViewPager
是提供的,我没有更改其中的任何内容(也许这就是我应该调查的地方)

第页:

行:

公共类行{
ArrayList mPagesRow=新的ArrayList();
公共无效添加页(第页){
mPagesRow.add(第页);
}
公共页面getPages(int索引){
返回mPagesRow.get(索引);
}
公共整数大小(){
返回mPagesRow.size();
}
}
GridPagerAdapter:

public class GridPagerAdapter extends FragmentGridPagerAdapter {
    private static final String TAG = "GridPagerAdapter";

    private final Context mContext;
    private ArrayList<Row> mPages;

    public GridPagerAdapter(Context context, FragmentManager fragmentManager) {
        super(fragmentManager);
        mContext = context;
        initPages();
    }

    private void initPages() {
        Log.d(TAG, "initPages");
        mPages = new ArrayList<Row>();
        Row row;

        for (int i = 0; i < 20; i++) {
            row = new Row();
            row.addPages(new Page("card #"+i,"lorem ipsum",R.color.black));
            row.addPages(new Page("card #"+i,"page 2",R.color.black));
            mPages.add(row);
        }
    }

    private void updatePages() {
        Log.d(TAG, "updatePages");
        mPages = new ArrayList<Row>();
        Row row;

        for (int i = 0; i < 20; i++) {
            row = new Row();
            row.addPages(new Page("updated card #"+i,"lorem ipsum",R.color.white));
            row.addPages(new Page("updated card #"+i,"page 2",R.color.white));
            mPages.add(row);
        }
    }

    @Override
    public Fragment getFragment(int row, int col) {
        Log.d(TAG, "getFragment("+row+","+col+")");
        Fragment fragment;
        Page page = mPages.get(row).getPages(col);
        fragment = (page.mIconId > 0 ? CardFragment.create(page.mTitle, page.mText, page.mIconId) : CardFragment.create(page.mTitle, page.mText));
        return fragment;
    }

    @Override
    public ImageReference getBackground(int row, int col) {
        Log.d(TAG, "getBackground("+row+","+col+")");
        Page page = mPages.get(row).getPages(col);
        return ImageReference.forDrawable(page.mBackgroundId);
    }

    @Override
    public int getRowCount() {
        return mPages.size();
    }

    @Override
    public int getColumnCount(int row) {
        return mPages.get(row).size();
    }

}
公共类GridPagerAdapter扩展了FragmentGridPagerAdapter{
私有静态最终字符串标记=“GridPagerAdapter”;
私有最终上下文mContext;
私人律师事务所;
公共GridPagerAdapter(上下文上下文,碎片管理器碎片管理器){
超级(碎片管理器);
mContext=上下文;
initPages();
}
私有void initPages(){
Log.d(标签“initPages”);
mPages=newarraylist();
行行;
对于(int i=0;i<20;i++){
行=新行();
添加页面(新页面(“卡片”#“+i,“lorem ipsum”,R.color.black));
行添加页面(新页面(“卡片”#“+i,“第2页”,R.color.black));
mPages.添加(行);
}
}
私有void updatePages(){
Log.d(标签“updatePages”);
mPages=newarraylist();
行行;
对于(int i=0;i<20;i++){
行=新行();
添加页面(新页面(“更新的卡片”#“+i,“lorem ipsum”,R.color.white));
添加页面(新页面(“更新的卡片”#“+i,“第2页”,R.color.white));
mPages.添加(行);
}
}
@凌驾
公共片段getFragment(int行,int列){
Log.d(标记“getFragment”(“+row+”,“+col+”));
片段;
Page Page=mPages.get(行).getPages(列);
fragment=(page.mIconId>0?CardFragment.create(page.mTitle,page.mText,page.mIconId):CardFragment.create(page.mTitle,page.mText));
返回片段;
}
@凌驾
公共图像引用getBackground(int行,int列){
Log.d(标记“getBackground”(“+row+”,“+col+”));
Page Page=mPages.get(行).getPages(列);
返回ImageReference.forDrawable(第页,mBackgroundId);
}
@凌驾
public int getRowCount(){
返回mPages.size();
}
@凌驾
公共整型getColumnCount(整型行){
返回mPages.get(row.size();
}
}

当我使用updatePages时,gridview中的文本会发生变化,但背景不会发生变化。

请查看提供的示例

{sdk_root}/samples/android-20/wearable/GridViewPager
方法

 public ImageReference getBackground(int row, int col)
       return new YourFragment();
       ...

是根据网格的行-想法是在一行中有一个“故事”,每个故事都有自己的背景图像

如果你想改变这一点,你应该使用自定义的Cardfragments,在你的系统中有自己的背景

public Fragment getFragment(int row, int col)

希望这有点帮助

您不能更新gridviewpager的背景,但可以将其包装在线性布局中并设置线性布局的背景

下面的例子

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@drawable/mybackgroundimage"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.support.wearable.view.GridViewPager
       android:id="@+id/pager"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:keepScreenOn="true"
       tools:context=".GridActivity" />

</LinearLayout>


您能提供您的实现的更多细节/代码吗?当然,但我认为这是非常经典的。这正是我所尝试的,但在这种情况下,我失去了背景之间的过渡…失去过渡是什么意思?我编辑了我的答案,也许现在更有帮助了。好吧,我理解你的答案,问题是我的问题不是很清楚。我希望每个片段有一个不同的背景(使用适配器的getBackground),我想稍后更新它们。我觉得根据你的回答,我对整个寻呼机只有一个背景。。。
public class YourFragment extends Fragment{
...
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.your_fragment, container, false);
        rootView.setBackground(yourDrawable);
        return rootView;
    }
public Fragment getFragment(int row, int col)
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:background="@drawable/mybackgroundimage"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <android.support.wearable.view.GridViewPager
       android:id="@+id/pager"
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:keepScreenOn="true"
       tools:context=".GridActivity" />

</LinearLayout>