2017-10-21 41 views
0

ceci est mon premier post stackoverflow.
J'essayais de construire une application qui restituer les données du capteur avec LocalBroadcastManager, puis mettre à jour TextView dans déjà attaché fragment à l'intérieur du conteneur.
J'ai essayé d'appeler la méthode homeFragment.passData() de MainActivity mais je n'ai pas réussi.
Ma conjecture est parce que le fragment déjà gonflé de sorte qu'il ne peut pas être mis à jour en appelant cette méthode.

Voici le code MainActivity où j'appelle méthode pour mettre à jour le textviewMise à jour du texte à l'intérieur du fragment à partir MainActivity

@Override 
    public void onReceive(Context context, Intent intent) { 
     String azimuthValue = intent.getStringExtra("azimuth"); 
     String pitchValue = intent.getStringExtra("pitch"); 
     String rollValue = intent.getStringExtra("roll"); 


     homeFragment.passData(azimuthValue, pitchValue, rollValue); 
    } 


Et voici le code pour HomeFragment

public class HomeFragment extends Fragment { 

private static final String TAG = "HomeFragment"; 

private Context mContext; 

private TextView xValueTextView; 
private TextView yValueTextView; 
private TextView zValueTextView; 

private OnFragmentInteractionListener mListener; 

@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.fragment_home, container, false); 

    xValueTextView = (TextView) rootView.findViewById(R.id.xValueTextView); 
    yValueTextView = (TextView) rootView.findViewById(R.id.yValueTextView); 
    zValueTextView = (TextView) rootView.findViewById(R.id.zValueTextView); 

    Log.d(TAG, "onCreateView: layout inflated"); 

    return rootView; 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    mContext = context; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

public interface OnFragmentInteractionListener {} 

public void passData(String x, String y, String z) { 
    xValueTextView.setText(x); 
    yValueTextView.setText(y); 
    zValueTextView.setText(z); 

    Log.i(TAG, "updateTextView: TextView value: " + xValueTextView.getText().toString() + "||" + yValueTextView.getText().toString() + "||" + zValueTextView.getText().toString()); 
} 

}


Bien que logcat textview.getText () .toString afficher la valeur mise à jour, la vue réelle n'est pas encore mise à jour

10-21 14:03:56.240 19338-19338/pro.adhi.willyam.orientation I/HomeFragment: updateTextView: TextView value: 45||-34||4 

est ici capture d'écran de mon téléphone: https://i.stack.imgur.com/ZDsad.png

Alors, comment mettre à jour correctement textview à l'intérieur fragment comme ce que je suis en train de réaliser?
J'espère que ma question est compréhensible. Thankyou

+0

il suffit d'utiliser un rappel, il appellera votre ui dans le fragment ou vous pouvez utiliser l'objet statique du fragment. Mais je vous recommande d'utiliser le rappel –

+0

im pas certain de ce que vous voulez dire, pouvez-vous être plus précis s'il vous plaît – fullmoon6661

Répondre

0

Vous devez configurer des méthodes setter/getter dans votre fragment.

public class HomeFragment extends Fragment { 

TextView tv; 

    public void setTextView(String text) 
    { 
     TextView tv = (TextView) findViewById(*your id here*); 
     tv.setText(text); 
    } 
} 

Dans le MainActivity vous venez d'utiliser cet appel:

public class MainActivity extends AppCompatActivity { 

    ... 

    HomeFragment.setTextView("Hello World!"); 

    ... 

} 
+0

appel findviewbyid à l'intérieur du fragment sans spécifier la vue renverra null. mais je vais quand même essayer – fullmoon6661