2016-04-06 10 views
0

Die Anwendung hat eine einzelne Aktivität (MainActiviy.java) + Fragment A, B, C, D usw .... Sun in Aktivität + Anwendung in das Fragment A, möchte das Fragment B ändern. Aber der Shift-Knopf ist in Fragment A. Bisher haben wir immer direkt in den Activity-Buttons gearbeitet und alles funktioniert. Aber der Austausch zwischen Fragment A und B mit direktem Knopf in Fragment A weiß nicht wie. Vor allem, dass ein Bündel verwendet wird, um einen PutString von A nach B zu senden.Änderung von Fragment A in Fragment B. Knopf von Änderung ist insaide Fragment A

Code Taste Fragment 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(); 

     } 
    }); 

"Rahmen" ist im Inneren Aktivität.

Ich denke, wir sollten das ändern, um MainActivity.java zu erhalten, um die Änderung vorzunehmen.

Antwort

0

Wenn ich verstehe, was Sie richtig machen, können Sie Ihre Aktivität an den Konstruktor Ihres Fragments A übergeben und es speichern. machen die Methode auf Ihrer Aktivität dann wie die Fragmente mit etwas wechseln:

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

dann von innen fragmenta auf klicken Sie die Aktivität aufrufen können, die Sie im Konstruktor von fragmenta gespeichert aus und rufen Sie die switchFragment Funktion auf die Aktivität .

+0

Ich möchte das Fragment A den Knopf A drücken und Fragment B öffnen. Knopf A ist in Fragment A. –

+0

Ja, also, wenn Sie den Knopf A in Fragment A drücken, können Sie die Switch-Fragment-Methode aufrufen, die auf der Aktivität ist. Sie können darauf zugreifen, weil Sie die Aktivität in Fragment A übergeben haben, als Sie sie erstellt haben. – BonBon

+0

public void switchFragment() Setzen Sie diese aus Aktivität, in Fragment A setzen private Main2Activity Aktivität; und von diesem Aufruf: activity.switchFragment(); ? –

Verwandte Themen