我有一个带有两个片段的ViewPager。我试图从FragmentTwo更改FragmentOne的一些视图。
在FragmentTwo中我有一些按钮。当用户点击时,某些视图(如TextView和ImageViews)应该更改属性。在FragmentTwo中单击按钮时,Callback正在调用MainActivity中的newMessage方法(请参阅下面的代码)。在MainActivity中,我试图更改FragmentOne视图的属性,但它不起作用。
@Override
public void newMessage(String message) {
View view = viewPager.getChildAt(CALCULATOR_FRAGMENT);
switch (message){
case SettingsFragment.CHANGE_COLOR:
((TextView)view.findViewById(R.id.textViewSum)).setTextColor(Color.RED);
break;
case SettingsFragment.NEW_PICTURE:
ImageSaver imageSaver = new ImageSaver(getBaseContext());
((ImageView) view.findViewById(R.id.imageViewBackground)).setImageBitmap(imageSaver.load());
break;
default:
break;
}
}
我不明白为什么它不起作用。
答案 0 :(得分:0)
我创建了一个demo to show how to update and replace Fragment in ViewPager:
在活动中点击按钮时,您应该更新数据,然后拨打notifyDataSetChanged
,
@Override
// page 0 data changed
public void onClick(View v) {
int id = v.getId();
if (id == R.id.main_dayPlusButton) {
mDate = new Date((mDate.getTime() + 24*3600*1000));
mViewPagerAdapter.notifyDataSetChanged();
}
}
此方法将触发要调用的ViewPager Adapter方法,您应该覆盖getItemPosition
以更新片段:
@Override
// To update fragment in ViewPager, we should override getItemPosition() method,
// in this method, we call the fragment's public updating method.
public int getItemPosition(Object object) {
Log.d(TAG, "getItemPosition(" + object.getClass().getSimpleName() + ")");
if (object instanceof Page0Fragment) {
((Page0Fragment) object).updateDate(mDate);
}
return super.getItemPosition(object);
};