web-dev-qa-db-fra.com

Comment changer le texte de fragmentView de l'activité

Je ne trouve pas comment changer le textview d'un fragment d'un Activity. J'ai 4 fichiers:

MainActivity.Java
activity_main.xml
FragmentClass.Java
frag_class.xml

frag_class.xml a textView, je veux changer le texte de MainActivity.Java . FragmentClass étend Fragment, ce fragment est affiché dans MainActivity FragmentClass a:

public void changeText(String text){
 TextView t = (TextView) this.getView().findViewById(R.id.tView);
 t.setText(text);
}

et dans MainActivity j'ai essayé ceci:

FragmentClass fc = new FragmentClass();
fc.changeText("some text");

Malheureusement, ce code me donne une exception NullPointerException à l'adresse fc.changeText("some text"); J'ai également essayé de modifier le texte directement à partir de MainActivity avec:

 TextView t = (TextView) this.getView().findViewById(R.id.tView);
 t.setText(text);

qui a échoué.

[EDIT] Le code complet est ici

28
Cԃաԃ

La réponse de @Lalit est correcte mais je vois que vous n'avez pas besoin de créer une fonction comme fragment_obj.updateTextView () ;. J'ai défini toutes mes vues en tant qu'objets de niveau classe et j'ai pu mettre à jour la vue texte directement.

fragmentRegister.textViewLanguage.setText("hello mister how do you do");

Remarque: Si vous devez effectuer plusieurs opérations, le choix est d’avoir une fonction.

5
Illegal Argument

De activity à Fragment par Fragment Transaction:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); 
    }
    public static void changeFragmentTextView(String s) {
        Fragment frag = getFragmentManager().findFragmentById(R.id.yourFragment);
        ((TextView) frag.getView().findViewById(R.id.textView)).setText(s);  
    }
}
10
Daryn

Je l'ai accompli autrement. Mon application fonctionne comme ceci:

Après avoir lancé mon application, j'ai créé MainActivity avec HomeFragment. Dans HomeFragment, j'ai Button et TextView pour connecter/afficher l'état de BluetoothConnection. 

Dans HomeFragment, j'ai implémenté Handler pour recevoir des informations de BluetoothService. Après avoir reçu le message, je voulais mettre à jour le texte TextView et Button. J'ai créé une interface publique dans HomeFragment avec une méthode qui obtient des arguments String pour TextView et Button. Dans onAttach (activité a), j'ai créé un objet mCallback pour parler à activité.

La prochaine étape consiste à implémenter cette interface dans MainActivity. À partir de cette activité, je mets à jour TextView et Button. Tout ressemble à ceci:

AccueilFragment.Java

public interface ViewInterface{
    public void onViewUpdate(String buttonTxt, String txtTxt);
}

@Override
public void onAttach(Activity a){
    super.onAttach(a);
    try{
        mCallback = (ViewInterface)a;
    }catch (ClassCastException e){
        e.printStackTrace();
    }
}

private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

                case MESSAGE_STATE_CHANGE:

                    if(true) Log.i(CLASS_TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
                    switch (msg.arg1) {
                        case BluetoothConnectionService.STATE_CONNECTED:

                            threadTextString = "Connected to: " + connectedDeviceName;
                            threadBtnString = "Disconnect";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
                        case BluetoothConnectionService.STATE_CONNECTING:
                           threadTextString = "Connecting...";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
                         case BluetoothConnectionService.STATE_NONE:

                            threadBtnString = "Connect";
                            threadTextString = "You're not connectedd";
                            mCallback.onViewUpdate(threadBtnString, threadTextString);
                            break;
}

private void updateBtn(Button btn, String data){
    btn.setText(data);
    Log.d(CLASS_TAG + "/" + "updateBtn", "Data: " + data);
}

private void updateTxt(TextView txt, String data){
    txt.setText(data);
    Log.d(CLASS_TAG + "/" + "updateTxt", "Data: " + data);

}

public void update(String buttonTxt, String txtTxt){
    this.updateTxt(connectTxt, txtTxt);
    this.updateBtn(connectButton, buttonTxt);
}

MainActivity.Java

@Override
public void onViewUpdate(String buttonTxt, String txtTxt) {
    HomeFragment homeFragment = (HomeFragment)getSupportFragmentManager().findFragmentById(R.id.frame_container);
    if(homeFragment != null){
    homeFragment.update(buttonTxt, txtTxt);
    }
}
1
Pan Wrona
public class Dcrypt extends Fragment {

Button butD;
ImageButton Dcopy;
EditText getPass;
TextView txtShow;

utiliser cette ligne de code pour obtenir le support du champ de texte

private FragmentManager supportFragmentManager;
0
Amank