0

Я вызываю метод активности из фрагмента A. Я работаю нормально. Но как я могу поместить строку, а затем открыть фрагмент B и получить информацию из строки?put string from call Activity Method From Inside A Fragment

активность:

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(); 

}

Фрагмент 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; 
         } 
        } 
       }); 

Пока все идет хорошо. Но где теперь положить цепочку строк?

 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(); 

, когда вы кладете в «тесте», «описание» является строка фрагмента А и не работают Фрагмент B:

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

(ошибка) .как вы можете сделать? thank you

+0

Вы пробовали статический метод ?? –

+0

Я не ставил статические, я просто пишу эти кодовые коды. не использовать статические. –

+0

простым способом является использование статического ключевого слова для вашего тестового метода и получение строки в качестве входного параметра следующим образом: public static test (String string), затем внутри тела теста создайте новый экземпляр Bundle и затем добавьте свой фрагмент –

ответ

0

Используйте newInstance, чтобы создать свой фрагмент, он будет использоваться как конструктор с параметрами. Вы можете найти много samples in the documentation.

В своем классе фрагмент, создать метод

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; 
} 

В каждой части вашего класса фрагмента, вы можете получить доступ к этому значению с

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

Затем вы можете использовать activity.test("bazinga") передать значение для фрагмента, где тест примерно такой:

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