Comment registerReceiver du Fragment
Je afficher les périphériques Bluetooth dans un ListView
. Je l'ai essayé dans un Activity
avant et ça a fonctionné, mais maintenant, je dois inclure cette ListView
dans un Fragment
Son clair qu'une ou deux choses qui n'appartiennent ici, comme le registerReceiver
, unregisterReceiver
et RESULT_CANCELED
.
protected void onResume() {
registerReceiver(receiver, filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
registerReceiver(receiver, filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(receiver, filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(receiver, filter);
}
@Override
protected void onPause() {
//TODO Auto-generated method stub
super.onPause();
unregisterReceiver(receiver);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
//TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_CANCELED){
Toast.makeText(getActivity() , "El Bluetooth debe estar activado para continuar", Toast.LENGTH_SHORT).show();
getActivity().finish();
}
}
Les lignes qui commencent par registerReceiver
, unegisterReceiver
et if(resultCode==RESULT_CANCELED){
sont me donne des problèmes.
Comme un supplément de fait, j'ai essayé de changer pour une Activité plutôt qu'un Fragment, mais ma classe Principale a une erreur car je suis en train de travailler avec les Fragments.
Veuillez inclure le code qui est pertinent à votre problème. C'est un énorme blob de code, et vous semblez avoir des problèmes avec environ trois lignes.
ok, c'est ça, le problème est le fait que trois des vides
ok, c'est ça, le problème est le fait que trois des vides
OriginalL'auteur Pamme Cobos | 2015-09-03
Vous devez vous connecter pour publier un commentaire.
Toutes ces méthodes et ces variables appartiennent à
Activity
classe. Envisagez donc de les appeler avec le contexte de l'Activité parent de Fragment.Vous pouvez appeler des méthodes requises:
et
if(resultCode==RESULT_CANCELED){
peut être remplacé par
if(resultCode == Activity.RESULT_CANCELED){
Espère que cela résoudre votre problème.
OriginalL'auteur astuter
Au sujet d'un message de diffusion, vous ne recevrez pas n'importe quoi, si vous vous inscrivez comme ça:
Vous devriez écrire:
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, filter);
Par exemple, le cas d'une intention envoyé à partir d'un service (IntentService).
OriginalL'auteur Bruno L.
La
registerReceiver()
etunregisterReceiver()
méthodes sont des méthodes de l'Context
classe. Dans ce cas, vous avez besoin de votreActivity
(qui est unContext
).Fragments de fournir un accès facile à leur contenant de l'Activité via le
getActivity()
méthode.RESULT_CANCELED
est simplement une variable statique sur leActivity
classe, de sorte que vous pouvez y accéder de n'importe où viaActivity.RESULT_CANCELED
.OriginalL'auteur Tanis.7x
étant donné que l'activité est recréé dans les modifications de la configuration, tout fragment de résister, il signifie contexte d'activité risque de disparaître, ce qui conduit à la perte de récepteurs à activité de loisirs. Donc, je vous suggère d'inscrire récepteurs de radiodiffusion dans votre fragment avec le niveau d'application de contexte. Ensuite, vous pouvez vous inscrire et se désinscrire de vos destinataires dans
onResume()
etonPause()
du fragment respectivement. De cette façon, vos récepteurs sont liés à l'fragment du cycle de vie et non pas l'activité.OriginalL'auteur abedfar