2016-04-06 17 views
0

アプリケーションには単一のアクティビティ(MainActiviy.java)+フラグメントA、B、C、Dなどがあります。 Sun in Activity + application inフラグメントAをフラグメントBに変更したいのですが、シフトノブはフラグメントAにあります。これまでは、アクティビティボタンには常に使用していましたが、すべてが機能しました。しかし、フラグメントAに直接ボタンを持つフラグメントAとBとの間のやりとりは、どのようにわからないのですか?特に、バンドルを使用してAからBへputStringを送信します。フラグメントBのフラグメントAの変更。変更のボタンは含まれていませんフラグメントA

コードボタンフラグメントA

{ 

     @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: 

            TorrentPlayerFragmentRemote fragment6 = new TorrentPlayerFragmentRemote(); 


            Bundle bundle = new Bundle(); 
            bundle.putString("url", description); 
            fragment6.setArguments(bundle); 




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

            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://dddd.ddd/remote/1.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; 
          } 
         } 
        }); 
      builder.create().show(); 

     } 
    }); 

"フレーム" は、アクティビティの内部にあります。

変更を加えるためにMainActivity.javaを受け取るように変更する必要があると思います。

答えて

0

あなたが正しくしようとしていることを理解している場合は、あなたのフラグメントAのコンストラクタにあなたのアクティビティを渡して、それを保存することができます。その後のようなものでフラグメントを切り替えるには、あなたの活動にメソッドを作る:クリックでFragmentA内から次に

`public void switchFragment(){ 
    FragmentManager fm = getActivity().getFragmentManager(); 
    fragmentB= (FragmentB) fm.findFragmentById(R.id.fragmentB); 
    if (fragmentB == null) { 
      fragmentB = FragmentB.newInstance("My Fragment B"); 
      fm.beginTransaction(). 
      replace(R.id.fragmentA, fragmentB).commit(); 
    } 
}` 

あなたはFragmentAのコンストラクタでオフに保存されたアクティビティを呼び出し、アクティビティにswitchFragment関数を呼び出すことができます。

+0

フラグメントAにボタンAを押し、フラグメントBを開きます。ボタンAはフラグメントAの内側にあります。 –

+0

フラグメントAのボタンAを押すと、そのアクティビティにあるスイッチフラグメントメソッドを呼び出すことができます。アクティビティーは、作成時にフラグメントAに渡されたため、アクセスできます。 – BonBon

+0

public void switchFragment()これをアクティビティのフラグメントAに入れます。プライベートなMain2Activityアクティビティを挿入します。これを呼び出すと:activity.switchFragment(); ? –

関連する問題