0

フラグメントAからアクティビティメソッドを呼び出しています。正常です。 しかし、どのように文字列を置くことができるのですが、それはフラグメントBを開き、文字列から情報を受け取りますか?内方からのActivityメソッドの呼び出しから文字列を挿入する

活動:

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

は、フラグメントAの文字列であり、 断片Bを動作しません:

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

(エラー).howあなたが行うことができますか?ありがとう

+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... 
    } 
関連する問題