你能更新GridViewPager的背景吗?

时间:2014-08-21 12:33:56

标签: java android android-adapter wear-os

在我的Adroid Wear应用程序中,我有一个GridViewPager和一个自定义FragmentGridPagerAdapter。我在启动应用程序时实例化我的adpater,稍后当我的掌上电脑应用程序提供新数据时我会更新其内容。

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

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

---编辑---

这是我的代码: 我的GridViewPager是提供的,我没有更改任何内容(也许这是我调查的地方)

页:

public class Page {

    public String mTitle;
    public String mText;
    public int mIconId = 0;
    public int mBackgroundId;

    public Page(String title, String text, int iconId, int backgroundId) {
        this.mTitle = title;
        this.mText = text;
        this.mIconId = iconId;
        this.mBackgroundId = backgroundId;
    }

    public Page(String title, String text, int backgroundId) {
        this.mTitle = title;
        this.mText = text;
        this.mBackgroundId = backgroundId;
    }
}

行:

public class Row {

    ArrayList<Page> mPagesRow = new ArrayList<Page>();

    public void addPages(Page page) {
        mPagesRow.add(page);
    }

    public Page getPages(int index) {
        return mPagesRow.get(index);
    }

    public int size(){
        return 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();
    }

}

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

2 个答案:

答案 0 :(得分:0)

查看提供的示例

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

方法

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

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

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

如果您想更改此内容,则应在

中使用具有自己背景的自定义Cardfragments
public Fragment getFragment(int row, int col)

希望有所帮助。

答案 1 :(得分:0)

您无法更新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>