2017-06-06 20 views
-1

Ich arbeite an einer App, wo ich zwischen zwei Fragmente kommunizieren muss. Ich weiß, dass die Kommunikation zwischen zwei Fragmenten über eine Schnittstelle erfolgt. Ich habe ein Interface in Fragment 1 erstellt und es in der Aktivität implementiert, aber wenn ich die App starte, stürzt es ab.Fragment zu fragment Kommunikation funktioniert nicht machen java.lang.nullpointerexception

unten ist mein Code

Fragment eines Code

public class Fragment_one extends Fragment { 

    EditText editText; 
    Button button; 

    SendData sd; 


    @Nullable 
    @Override 
    public View onCreateView(final LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     View view; 

     view = inflater.inflate(R.layout.fragment_one,container,false); 



     editText = (EditText)view.findViewById(R.id.editText); 

     button = (Button)view.findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       String data ; 
       data = editText.getText().toString(); 
       sd.SendData1(data); 
      } 
     }); 

     return view; 

    } 



     interface SendData 
    { 
     String SendData1(String name); 

    } 


    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 


     try{ 

      sd = (SendData)context; 


     }catch (ClassCastException e){ 

      throw new ClassCastException ("You have to impliment it"); 

     } 

    } 
} 

wenn ich die app debuggen, ich weiß, dass sdnull ist. Aber die Daten werden auf den Text gesetzt.

Kann mir jemand mit diesem Problem helfen

+0

Was ist 'SendData'? –

+0

Setzen Sie einen Haltepunkt innerhalb Ihrer 'onAttach()', und sehen Sie, warum es null ist. –

+0

können Sie eine Schnittstelle verwenden, um mit den Fragmenten zu kommunizieren. –

Antwort

0

Vor-Interface-Funktionen zugreifen Sie die Definition implementieren müssen.

Sie geben wie

interface SendData { 
public String SendData1(String name); 
} 

Sie diese Funktion beispielsweise wie folgt aus definieren:

SendData sd; 
sd = new SendData() { 
public String SendData(String name) { 
    return name; 
    } 
}; 
+0

danke jetzt Daten werden übergeben Aktivität zu senden –

0

In erstem Fragmente ..

Fragment fragment = new EditExamFragment(); 
       FragmentManager fm = getActivity().getSupportFragmentManager(); 
       FragmentTransaction ft = fm.beginTransaction(); 
       ft.replace(R.id.content_frame, fragment); 
       ft.commit(); 

       Bundle bundle = new Bundle(); 
       bundle.putString("branch_id", mDataset.get(position).getiBranchId()); 

       bundle.putString("exam_id",mDataset.get(position).getiExamId()); 
       fragment.setArguments(bundle); 

In der zweiten Fragmente Werte für das Abrufen Code unten versuchen;

String branch_id, exam_id ; 


final Bundle bundle = this.getArguments(); 
    if (bundle != null) { 
     branch_id = bundle.getString("branch_id");   
     exam_id = bundle.getString("exam_id"); 
    } 

Wenn Sie mehr über Bundle Klasse wissen, dann Link klicken: https://developer.android.com/reference/android/os/Bundle.html

+0

was' content_frame'? –

0

Wenn Sie Daten von FirasrFragment senden möchten dann SecondFragment verwenden Bundle Klassendaten auf das Senden

//Put the value 
SecondFragment sFrag = new SecondFragment(); 
Bundle args = new Bundle(); 
args.putString("YourKey", "YourValue"); //replace "YourValue" to editText.getext().toString().trim(); 
sFrag.setArguments(args); 

//Inflate the fragment 
getFragmentManager().beginTransaction().add(R.id.container, sFrag).commit(); 

In onCreateView des SecondFragment:

//Retrieve the value 
String value = getArguments().getString("YourKey"); 

mehr über Bundle Class

+0

Was ist 'R.id.container'? –

+0

R.id.content_frame ist die Fragment-ID aus layout_fragment_second.xml –

0

Wenn Sie mit Plattform Fragmente arbeiten (Sie haben android.app.Fragment erweitert) die onAttach(Context) Methode wurde in API-Ebene 23. Diese Methode aufgerufen wird nie älter auf Geräte hinzugefügt als Eibisch .

Aufschalten onAttach(Activity) statt.


Wenn Sie sich erstreckendes Stütz Fragmente (android.support.v4.app.Fragment) außer Acht lassen diese Antwort.

Verwandte Themen