2

Ainsi, j'ai cette application de test où j'essaie d'avoir deux fragments communiquer via MainActivity. Après quelques recherches, j'ai réussi à transmettre des données de MainFragment à FragmentTwo. Cependant, chaque fois que je passe en valeur de chaîne de la MainFragment, je reçois un message disantLe champ EditText obtient une sortie incorrecte

"android.support.v7.widget.AppCompatEditText {cce883f VFED ..... app: id/editText}"

Je ne pouvais pas trouver quel était le problème pour ce cas. S'il vous plaît aider. BTW Je sais comment utiliser les intentions et qu'elles sont beaucoup plus flexibles (parfois) que les fragments, mais c'est juste pour savoir jusqu'où je peux aller avec Fragments.

Voici mon MainActivity

import android.app.FragmentManager; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.Snackbar; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 

public class MainActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener,      MainFragment.OnHeadlineSelectedListener { 

private String dataReceiver; 



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

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

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


} 

@Override 
public void sendInformations(String message) { 
    FragmentTwo fragmentTwo = new FragmentTwo(); 
    Bundle args = new Bundle(); 
    args.putString(fragmentTwo.DATA_RECEIVE, message); 
    fragmentTwo.setArguments(args); 
    getFragmentManager().beginTransaction() 
      .replace(R.id.container, fragmentTwo) 
      .commit(); 
} 

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

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    FragmentManager fragmentManager = getFragmentManager(); 

    int id = item.getItemId(); 

    if (id == R.id.frag_one) { 
     fragmentManager.beginTransaction().replace(R.id.container, new FragmentOne()).commit(); 
    } else if (id == R.id.frag_two) { 
     fragmentManager.beginTransaction().replace(R.id.container, new FragmentTwo()).commit(); 
    } else if (id == R.id.frag_three) { 
     fragmentManager.beginTransaction().replace(R.id.container, new FragmentThree()).commit(); 
    } else if (id == R.id.frag_four) { 
     fragmentManager.beginTransaction().replace(R.id.container, new FragmentFour()).commit(); 
    } else if (id == R.id.main_frag) { 
     fragmentManager.beginTransaction().replace(R.id.container, new MainFragment()).commit(); 


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

classe MainFragment

import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 


public class MainFragment extends Fragment { 
OnHeadlineSelectedListener mCallback; 
Button sendData; 


public interface OnHeadlineSelectedListener { 
    public void sendInformations(String message); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 


    try { 
     mCallback = (OnHeadlineSelectedListener) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
    } 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

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

    View rootView = inflater.inflate(R.layout.main_fragment, container, false); 

    final EditText userInput = (EditText) rootView.findViewById(R.id.editText); 
    sendData = (Button) rootView.findViewById(R.id.button); 


    sendData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (v.getId() == R.id.button) { 
       mCallback.sendInformations(userInput.toString()); 
      } 
     } 
    }); 

    return rootView; 
} 
} 

classe FragmentTwo

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 



public class FragmentTwo extends Fragment { 
final static String DATA_RECEIVE = "data_receive"; 
TextView textView; 
String input; 

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

    View rootView = inflater.inflate(R.layout.fragment_two, container, false); 
    textView = (TextView) rootView.findViewById(R.id.data_receiver2); 
    savedInstanceState = getArguments(); 
    if(savedInstanceState != null) { 
     input = savedInstanceState.getString(DATA_RECEIVE); 
    } 
    textView.setText(input); 
    return rootView; 
} 
} 

Oh, et le message que je reçois est quand je lance l'application, entrez dans le champ de texte , et appuyez sur le bouton, je reçois le message étrange. J'apprécierais si quelqu'un peut me dire quelle est la cause de la sortie étrange ..

Si c'est un bug, que j'avais remarqué dans certains cas qui étaient pertinents, est-ce parce que je déprécié la v7.Fragment 07.v7.FragmentManager ?

Répondre

0

Vous passez fondamentalement le EditText comme une chaîne à la place de la valeur EditText.

Dans votre changement MainFragment mCallback.sendInformations(userInput.toString()); à mCallback.sendInformations(userInput.getText().toString());

sendData.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (v.getId() == R.id.button) { 
      mCallback.sendInformations(userInput.getText().toString()); 
     } 
    } 
}); 
+0

Merci beaucoup Vey. Cela semblait régler le problème. –

+0

À la votre! Heureux d'avoir pu aider. –