[Q] referencing a dynamica fragment topic

SOCIALIZE IT ⇨

Hi

Frag1 which is a side navigation drawer, is instantiated in MainActivity.java onCreate by manager.findFragmentById since there is a fragment tag in a xml file.
Frag2 and Frag3 are dynamically committed at some point by a manager, non of their layouts contain a <fragment> tag, they are not committed in the MainActivity onCreate method and thus don't have ids or tags either.
When a button on frag2 is pressed, frag3 "a dialogFragment" needs to be displayed on the screen for user login inputs.

How can I get this to work? I am getting null pointer when referencing frag2 in MainActivity.

here is a illustrative stripped down version of the code. sorry for any unintended typos

Thank you for helping

Frag2.java

Code:


public class Frag2 extends Fragment {

        Frag2Communicator = mFrag2communicator;
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.frag2_layout, container, false);
     
            class ClickHandler implements View.OnClickListener {
                        @Override
                        public void onClick(View v) {
                                mFrag2communicator.show_frag3();
                        }
                } 
    }
    public interface Frag2Communicator {
        public void show_frag3();
    }

    public void setFrag2Communicator(Frag2Communicator frag2communicator) {
        mFrag2communicator = frag2communicator;
    }
}


MainActivity.java

Code:


public class MainActivity extends ActionBarActivity implements frag2.frag2Communicator {
        protected void onCreate(Bundle savedInstanceState) {
                Frag2 frag2 = getSupportFragmentManager().findFragmentById(R.id.frag_2);
                //frag_2 is the id of a RelativeLayout inside a ScrollView inside frag2_layout.xml
                //I tried to move this ide to the root tag "ScrollView" but still get a null pointer.
               
                frag2.setFrag2Communicator(this);
               
                public void show_frag3(){
                        FragmentManager manager = getSupportFragmentManager();
                        Frag3 frag_3 = new Frag3();
                        frag_3.show(manager, "loging");
                }
        }
}



xda-developers


0 commentaires:

Enregistrer un commentaire