使用ViewPager更改Activity中Fragment中Views的属性

时间:2016-08-10 14:21:33

标签: android android-fragments android-viewpager

我有一个带有两个片段的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;
    }
}

我不明白为什么它不起作用。

1 个答案:

答案 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);
};

enter image description here