如何根据当前显示的片段更改父活动的背景图像

时间:2016-05-15 17:37:29

标签: android android-fragments

我有两个片段,fragment_one(fragmentOne.class)和fragment_two(fragmentTwo.class)。这些片段显示在ActivityMain.class中。

当我显示fragment_one时,我想将Image A设置为ActivityMain.class的背景。

当我显示fragment_two时,我想将Image B设置为ActivityMain.class的背景

当我不使用片段时(我使用按钮作为测试),我可以交换并设置ActivityMain.class的背景....但是,当我为片段修改它时,我无法使其工作。

在此列出,您将看到我的ActivityMain.class

public class ActivityMain extends FragmentActivity {

//set variables for use of pageradapter and swipe screen
MyPageAdapter adapter;
ViewPager pager;
Context context = this;
LinearLayout swipeHomeScreen;


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_activity_nav);

    //Implement the adapater for the swipe screen on launch page and circle indicator
    adapter = new MyPageAdapter(getSupportFragmentManager());
    pager = (ViewPager) findViewById(R.id.pager);
    pager.setAdapter(adapter);
    swipeHomeScreen = (LinearLayout) findViewById(R.id.swipeHomeScreen);

}

}

这里我列出了我的一个片段的代码,我试图分享/传递ActivityMain.class的背景图片......

public class ActivityNavSwipeTwo extends Fragment {

ActivityMain main;

public void onAttach(Activity activity) {
    main = (ActivityMain) activity;
};

public static ActivityNavSwipeTwo newInstance() {
    ActivityNavSwipeTwo fragment = new ActivityNavSwipeTwo();
    return fragment;
}

public ActivityNavSwipeTwo() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_two, null);
    main.swipeHomeScreen.setBackgroundResource(R.drawable.Image2);
    return root;
}

}

我的活动可以很好地膨胀碎片,但背景图像不会改变。

我怎样才能为目标api实现这个???

感谢您的支持。

2 个答案:

答案 0 :(得分:0)

在您的活动中实施viewpager.onpagechangedlistener。然后在oncreated方法中添加view.setonpageselecterlistener(this)。您可以控制在页面选择的方法

上实现的选定片段

答案 1 :(得分:0)

您的活动肯定有任何父布局(相对/线性)。所以你必须做以下事情:

  • 如果未创建,则创建父布局的ID。
  • 从片段访问并更改该父布局的背景颜色。

    在Fragment的relativeLayout = (RelativeLayout)getActivity().findViewById(R.id.relativelayout);方法中写下这个。

    relativeLayout.setBackground(background); {{1}}