2016-05-06 31 views
-1

ICH WAR AM BEISPIEL ARBEITS GAB SIE GERADE MICH ALS DUPLICATE, LESEN SIE DIE GESAMTE POST, TYWie zeige ich einen Text von einem Fragment in einem anderen Fragment?

ich mithilfe der Vorlage von Android-Studio zur Verfügung gestellt Menü mit Schiebe eine einfache Anwendung zu machen. Und ich muss Fragmente verwenden, um zwischen den Elementen des gleitenden Menüs zu wechseln.

Was ich tun möchte? (siehe App-Design unten)

Wenn ich auf die Schaltfläche Daten übergeben klicke, sollte der Text im Fragment B auf den Text gesetzt werden, den ich in Fragment A eingegeben habe, ohne direkt auf das Fragment B zu gehen drücke die Schaltfläche Daten übergeben, dann gehe ich zum gleitenden Menü und wähle den Gegenstand, der Fragment B enthält und dann möchte ich den Text von Fragment A sehen. Danke im Voraus.

public class MainActivity extends AppCompatActivity implements FragmentA.DataPassListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      int id = item.getItemId(); 

      if (id == R.id.nav_camera) { 
       // Handle the camera action 

       displayFragmentA(); 
      } else if (id == R.id.nav_gallery) { 

       displayFragmentB(); 

      } else if (id == R.id.nav_slideshow) { 

      } else if (id == R.id.nav_manage) { 

      } else if (id == R.id.nav_share) { 

      } else if (id == R.id.nav_send) { 

      } 

      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      drawer.closeDrawer(GravityCompat.START); 
      return true; 
     } 
    }); 
} 

@Override 
public void onBackPressed() { 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } else { 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


@Override 
public void passData(String data) { 

    FragmentB fragmentB = new FragmentB(); 
    Bundle args = new Bundle(); 
    args.putString("data", data); 
    fragmentB.setArguments(args); 
    //getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragmentB).commit(); 
    //it works with the commented part but I dont wanna go directly to the fragment when I press pass data button 


} 

public void displayFragmentA() { 

    FragmentA frag = new FragmentA(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, frag); 
    fragmentTransaction.commit(); 


} 

public void displayFragmentB() { 

    FragmentB frag = new FragmentB(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, frag); 
    fragmentTransaction.commit(); 


} 
} 

Fragment A-Code:

public class FragmentA extends Fragment { 

DataPassListener mCallback; 

public interface DataPassListener { 
    public void passData(String data); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    // Make sure that container activity implement the callback interface 
    try { 
     mCallback = (DataPassListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement DataPassListener"); 
    } 
} 


public FragmentA() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_a, container, false); 

    final EditText input = (EditText) view.findViewById(R.id.etInputID); 

    Button passDataButton = (Button) view.findViewById(R.id.bPassDataID); 
    passDataButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      mCallback.passData(input.getText().toString()); 

     } 
    }); 


    return view; 
} 

} 

Fragment B-Code:

public class FragmentB extends Fragment { 

TextView showReceivedData; 


public FragmentB() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_fragment_b, container, false); 

    showReceivedData = (TextView) view.findViewById(R.id.showReceivedData); 

    Bundle args = getArguments(); 
    if (args != null) { 

     showReceivedData.setText(args.getString("data")); 

    } else { 

     Toast.makeText(getActivity(), "didnt get the bundle from mainactivity", Toast.LENGTH_LONG).show(); 
    } 


    return view; 
} 


} 

Gestaltung der App:

Fragment A

Fragment B

+0

Ihre Frage ist ein bisschen breit, poste nicht dein gesamtes Projekt, poste ein minimales Beispiel. Sie müssen die Daten irgendwo speichern. – cyroxis

+1

Mögliches Duplikat von [Wie Werte zwischen Fragmenten übergeben werden] (http://stackoverflow.com/questions/16036572/how-to-pass-values-between-fragments) – NoChinDeluxe

+0

NoChinDeluxe Ich arbeitete an dem Beispiel, das Sie gerade gepostet haben. – Nenco

Antwort

1

Wenn diese beiden Fragmente derselben Aktivität verwenden,

Wert Fragment zu setzen:

getActivity().getIntent().putExtra("key", "value"); 

Um Wert von Fragment zu erhalten:

getActivity().getIntent().getExtras().getString("key"); 
+0

yee, das funktioniert, aber mein Problem ist, dass es nicht den Wert zeigt, wenn ich es ohne den kommentierten Teil – Nenco

+0

ich verstehe nicht, was Du hast es genau gesagt. Kannst du das erklären? – hkaraoglu

+0

überprüfen Sie die Methode übergeben Daten in Mainactivity, der Teil, der genau kommentiert wird. Wenn ich das auskommentiere, funktioniert alles, aber es geht direkt zu Fragment B, wenn ich die Schaltfläche "Daten übergeben" drücke. Und ich möchte zum gleitenden Menü gehen und zu dem Galerieelement gehen, wo sich mein Fragment B befindet und dann innerhalb dieses Galerieelements möchte ich den Text von Fragment A sehen – Nenco

Verwandte Themen