0

Ich rufe Aktivitätsmethode von Fragment A. Es funktioniert gut. Aber wie kann ich eine Zeichenfolge, dann das Fragment B öffnen und Informationen von der Zeichenfolge erhalten?put string von Aufruf Aktivität Methode von innerhalb eines Fragments

Aktivität:

public void test(){ 


Send_torrent_url_androidTv_Fragment fragment4 = new Send_torrent_url_androidTv_Fragment(); 
fragment4.onDestroyView(); 
FragmentTransaction fragmentTransaction4 = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction4.addToBackStack(null); 
getFragmentManager().popBackStack(); 
fragmentTransaction4.remove(fragment4); 
fragmentTransaction4.replace(R.id.frame,fragment4); 
fragmentTransaction4.commit(); 

}

Fragment A:

// Listview on item click listener 
lv.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, final View view, 
          int position, long id) { 
     // getting values from selected ListItem 

     final String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); 

     final String id_stream = ((TextView) view.findViewById(R.id.id_streaming)).getText().toString(); 

     // Starting single contact activity 

     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppCompatAlertDialogStyle); 
     builder.setTitle("Select"); 
     // builder.setMessage("Lorem ipsum dolor ...."); 
     builder.setItems(new CharSequence[] 
         {getString(R.string.play_video), getString(R.string.remove_video)}, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         // The 'which' argument contains the index position 
         // of the selected item 
         switch (which) { 
          case 0: 
           Activity activity = getActivity(); 
           if(activity instanceof Main2Activity){ 
            Main2Activity myactivity = (Main2Activity) activity; 
            myactivity.test(); 
           } 



           break; 
          case 1: 
           // Snack Bar 
           Snackbar bar = Snackbar.make(view, R.string.confirm_delete_playlist, Snackbar.LENGTH_LONG) 
             .setAction(R.string.yes, new View.OnClickListener() { 
              @Override 
              public void onClick(View v) { 

               // ---Control remote api--- 
               new Thread() { 

                public void run() { 

                 try { 
                  HttpURLConnection.setFollowRedirects(false); 
                  // note : you may also need 
                  //HttpURLConnection.setInstanceFollowRedirects(false) 

                  HttpURLConnection con = (HttpURLConnection) new URL("http://xxxx/remote/delete-.php?id="+id_stream).openConnection(); 
                  con.setRequestMethod("HEAD"); 
                  if(con.getResponseCode() == HttpURLConnection.HTTP_OK) { 

                   //--refresh fragment 
                   FragmentTransaction ft = getFragmentManager().beginTransaction(); 
                   ft.detach(playlist_torrent.this).attach(playlist_torrent.this).commit(); 
                   //Fin refresh fragment 

                   // startActivity(getIntent()); 
                   // finish(); 

             /*  final Handler handler = new Handler(); 
               Runnable refresh = new Runnable() { 
                @Override 
                public void run() { 
                 new onPreExecute().execute(); 
                 handler.postDelayed(this, 60 * 1000); 
                } 
               }; 
               handler.postDelayed(refresh, 60 * 1000);  */ 
                  } 
                  else{ 

                  } 
                 } 
                 catch (Exception e) { 
                  e.printStackTrace(); 
                 } 
                } 
               }.start(); 
               // ----fin Control remote api---- 
              } 
             }); 

           bar.show(); 


           break; 
         } 
        } 
       }); 

Bisher alles gut geht. Aber wo platziere jetzt ein String-Bündel?

 Send_torrent_url_androidTv_Fragment fragment4 = new Send_torrent_url_androidTv_Fragment(); 





> Bundle bundle = new Bundle(); 
>  bundle.putString("token", description); 
>  fragment4.setArguments(bundle); 




     fragment4.onDestroyView(); 
     FragmentTransaction fragmentTransaction4 = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction4.addToBackStack(null); 
     getFragmentManager().popBackStack(); 
     fragmentTransaction4.remove(fragment4); 
     fragmentTransaction4.replace(R.id.frame,fragment4); 
     fragmentTransaction4.commit(); 

, wenn Sie in "test" setzen, "description" ist eine Kette von Fragment A und Fragment b nicht:

Bundle args = getArguments(); 
           String token = args.getString("token"); 

(Fehler) .wie können Sie tun? danke

+0

hast du versucht, statische Methode ?? –

+0

ich nicht statisch, ich schreibe einfach nur diesen Code-Codes. verwende nicht statisch. –

+0

eine einfache Möglichkeit ist static Schlüsselwort für Ihre Testmethode zu verwenden und String als Eingabeparameter wie folgt zu erhalten: public static test (String string) dann innerhalb von body of test neue Instanz von Bundle und .. dann füge dein Fragment hinzu –

Antwort

0

Verwenden Sie newInstance, um Ihr Fragment zu erstellen, es wird als Konstruktor mit Parametern verwendet. Sie können viele samples in the documentation finden.

In Ihrem Fragment Klasse, erstellen Sie die Methode

public static Send_torrent_url_androidTv_Fragment newInstance(String param) { 
     Send_torrent_url_androidTv_Fragment fragment = new Send_torrent_url_androidTv_Fragment(); 
     Bundle args = new Bundle(); 
     args.putString("somelabel", param); 
     fragment.setArguments(args); 
     return fragment; 
} 

In jedem Teil des Fragments Klasse können Sie dann Zugriff auf diesen Wert mit

this.getArguments().getString("somelabel") 

Dann können Sie activity.test("bazinga") verwenden passieren der Wert für das Fragment, wo Test ist so etwas

public void test(String param){ 
     Send_torrent_url_androidTv_Fragment fragment4 = Send_torrent_url_androidTv_Fragment.newInstance(param); 
     //... more code... 
    }