在我的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中的文本会改变,但不会改变我的背景。
答案 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;
}
根据网格的行 - 想法是连续一个“故事”,每个故事都有自己的背景图像。
如果您想更改此内容,则应在
中使用具有自己背景的自定义Cardfragmentspublic 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>