2017-10-05 4 views
0

Ich versuche, Daten von einer Aktivität zu einem Fragment zu senden. Ich sende keine Daten von einem Fragment an eine Aktivität. Ich habe alles richtig eingerichtet, außer das Interface-Listener-Objekt in der Aktivität instanziieren.Senden von Daten von Aktivität zu Fragment mit Schnittstellen-Listener

public class Activity extends AppCompatActivity { 

    private FragmentInterface fragmentInterfaceListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // This line below is actually in a button onClick() 
    fragmentInterfaceListener.sendDataMethod(dataToSend); 

    } 

    public interface FragmentInterface { 
    void sendDataMethod(SampleData sampleData); 
    } 
    } 

Dann im Fragmente, ich habe:

public static class CustomFragment extends Fragment implements Activity.FragmentInterface { 

    @Override 
    public void sendDataMethod(final SampleData sampleData) { 

    }  
} 

Als ich in der Schaltfläche onClick(), wird die Protokollzeile ein Protokoll setzen, wenn die Schaltfläche geklickt wird. Nein, ich werde die Beispieldaten nicht in ein Fragmentpaket einfügen. Ja, ich muss die Daten über eine Schnittstelle senden. Wie instanziiere ich das fragmentInterfaceListener-Objekt in der Aktivität? Fehle ich noch etwas in der Aktivität oder CustomFragment?

+0

Sie haben eindeutig zu fragen. Seien Sie nicht faul, Ihren Code zu setzen – zihadrizkyef

+1

Anstelle von "FragmentInterface" -Schnittstelle in Ihrer Aktivität, warum nicht Sie 'CustomFragment' Fragment in Ihrer Aktivität für statt. Und dann können Sie öffentliche Methoden im 'CustomFragment'-Fragment deklarieren, damit Ihre Aktivität diese Methoden problemlos verwenden kann. –

Antwort

1

Was Sie hier vermissen, ist der Registrierungsteil.

Das Fragment hat sich für die Aktivität mit der Aktivität Listener zu registrieren, Daten zu senden, wenn ein Ereignis occurs.To dies in der Aktivität, ein Verfahren zu tun erstellen

private void setOnDataListener(FragmentInterface interface){ 
    fragmentInterfaceListener=interface; 
} 

Und im oncreate Ihres Fragment, das den Hörer eingestellt wie dies

((YOUR_ACTIVITY_NAME)getActivity()).setOnDataListener(this); 
+0

Ihre herzlichsten..Wenn das funktioniert, dann akzeptieren Sie meine Antwort und schließen Sie diese Frage – Anonymous

0

Sie brauchen nicht Hörer im Fragmente zu verwenden, da Sie direkt mit dem Fragmente aus seiner Host Aktivität kommunizieren können.

Wie @ lq-gioan sagt, können Sie in Ihrem Fragment eine öffentliche Methode erstellen und sie dann von Ihrer Aktivität aus aufrufen. So erstellen Sie eine öffentliche Methode, die Daten setzen, etwa so:

public static class CustomFragment extends Fragment { 

    // public method to be accessed by host activity. 
    public void sendDataMethod(final SampleData sampleData) { 

    }  
} 

Dann können Sie die Methode in Ihrer Host-Aktivität aufrufen:

CustomFragment fragment = (CustomFragment)getSupportFragmentManager() 
          .findFragmentById(R.id.fragment_id); 

// or use find by tag if you adding the fragment by tag 
// CustomFragment fragment = (CustomFragment)getSupportFragmentManager() 
//       .findFragmentByTag("FragmentTag"); 

// now you can call it 
fragment.sendDataMethod(yourSampleData); 
0

Für Daten von Aktivität zu senden wir fragmentieren don‘ Ich brauche eine Schnittstelle.

Sie können direkt die Methode in Fragment nennen oder als setArguments in Bundle passieren

 ArticleFragment articleFrag = (ArticleFragment) 
      getSupportFragmentManager().findFragmentById(R.id.article_fragment); 

    if (articleFrag != null) { 
     // If article frag is available, we're in two-pane layout... 

     // Call a method in the ArticleFragment to update its content 
     articleFrag.updateArticleView(position); 
    } else { 
     // Otherwise, we're in the one-pane layout and must swap frags... 

     // Create fragment and give it an argument for the selected article 
     ArticleFragment newFragment = new ArticleFragment(); 
     Bundle args = new Bundle(); 
     args.putInt(ArticleFragment.ARG_POSITION, position); 
     newFragment.setArguments(args); 

     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 

     // Replace whatever is in the fragment_container view with this fragment, 
     // and add the transaction to the back stack so the user can navigate back 
     transaction.replace(R.id.fragment_container, newFragment); 
     transaction.addToBackStack(null); 

     // Commit the transaction 
     transaction.commit(); 
    } 

Sie verweisen https://developer.android.com/training/basics/fragments/communicating.html

Verwandte Themen