简体   繁体   中英

Android Fragments: How to work with views on other layouts?

I am writing an Android app (4.4) that uses Fragments. Each Fragment is in it's own .java file (and its own class), and each one has it's own .XML (layout) file. In the main FragmentActivity, my "getItem" routine reads the "position" argument, and creates instances of these classes as needed.

When the app starts, when Fragment 0 (zero) starts up, it runs some code in the "onCreateView." Based on what happens in that code, I need to change the UI of the Fragment 1 (buttons appear & disappear based on that logic).

However, the code RUNS with no errors, but the UI changes do not take effect. I'm thinking that perhaps I need to run my "startup" code somewhere else with a wider scope. I could be wrong.

Can anyone suggest a way for me to be able to control the UI of various layouts at startup?

Thanks!

If you can post some of your code, would be easier.

anyway if I got your problem, you need to change the UI of the fragment 1 from the fragment 0.

What you need is what is explained in the document Communicating with Other Fragments

you should do something like:

public class MyActivity extends FragmentActivity implements MyInterface{

    @Override
    public void changeUI(String sometext) {
        Fragment1 fragment1 = (Fragment1) getFragmentManager().findFragmentByTag("tagCommittedFragment1");
        fragment1.applyChange(sometext);
    }

}

public class Fragment0 extends Fragment{

    MyInterface mMyInterface;

    public interface MyInterface {
        public void changeUI(String sometext);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mMyInterface = (MyInterface) activity;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);          
        mMyInterface.changeUI("newtext");
    }

}

public class Fragment1 extends Fragment{
    public void applyChange(String sometext){
        // do your work
    }
}

You must make an interface to communicate between Fragments which would be implemented by your MainActivity:

public interface Communicator {

        public void respond(String data);
    }  

Now you need to use this Interface to send data from FragmentA:

Communicator comm = getAcitivity();     //your activity must implement this interface 
comm.respond(data);

As your MainActivity implements the above interface, it will also implement the respond() method which can be used to pass data to FragmentB:

public void respond(String data){
    FragmentManager manager = getSupportFragmentManager();
    FragmentB fragB = manager.findFragmentById(R.id.fragment_b);
    fragB.changeData(data);
}

Now all you need to do is collect this data and make changes in FragmentB using a changeData() method:

public void changeData(String data){
    textView.setText(data);
}

NOTE: As FragmentB has no use of the Interface, it should not be visible to it, therefore you can also create the interface inside FragmentA instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM