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