L'utilisation de getActivity
Tout d'abord désolé si ce post peut sembler un doublon, mais je suis très nouveau pour Android programmation et l'affichage de cette question que lorsque je ne suis toujours pas en mesure d'obtenir une réponse satisfaisante pour l'utilisation de getActivity.
Théoriquement je comprends l'utilisation de getActivity() de la plusieurs posts ici mais je ne sais pas comment c'est de travailler dans mon code.
J'ai une classe MainActivity à partir de laquelle je suis entrain de créer un dialogue onclick d'une case à cocher.
J'ai une autre classe TaxDialog où le dialogue est mis en œuvre. Cliquez sur Oui/Pas de boutons, je suis de l'appel de méthodes à définir dans la classe MainActivity.
Ci-dessous les codes:
MainActivty
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity implements View.OnClickListener, View.OnFocusChangeListener {
//onCheck of checkbox showNoticeDialog is called
public void showNoticeDialog() {
//Create an instance of the dialog fragment and show it
Log.i("MyActivity", "Inside showNoticeDialog");
DialogFragment dialog = new TaxDialog();
Bundle args = new Bundle();
args.putString("title", "Test");
args.putString("message", "Test Message");
dialog.setArguments(args);
dialog.show(getSupportFragmentManager(), "dialog");
}
public void doPositiveClick(){
Log.i("MyActivity", "Inside +ve");
}
public void doNegativeClick(){
Log.i("MyActivity", "Inside -ve");
}
}
TaxDialog
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.Log;
public class TaxDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bundle args = getArguments();
String title = args.getString("title");
String message = args.getString("message");
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, null);
Log.i("MyActivity", "Expected fault area.");
((MainActivity) getActivity()).doPositiveClick();
}
});
builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((MainActivity) getActivity()).doNegativeClick();
}
});
builder.create();
return builder.create();
}
}
Ici, je veux comprendre comment les dessous de la ligne des œuvres
((MainActivity) getActivity()).doPositiveClick();
et aussi, merci de me faire connaître d'autres façons de faire la même chose (quelque chose comme MainActivity.c'.getActivity() ou quelque chose d'autre).
Merci beaucoup.
MODIFIER
Merci à tous. Probablement je l'ai encadrée correctement la question. Mon seul doute est la façon dont getActivity() retourne la référence à l'Activité. Maintenant, je comprends.
- Lorsque vous utilisez des fragments c'est la seule façon de les mettre en contexte. Comme ci-dessus, vous utilisez
DialogFragment
et dansOnClickListener
il est nécessaire de contexte. - Les meilleurs conseils et je suis désolé d'être grossier serait, obtenir un bon Java livre et de le lire avant de sauter dans Android, de toute façon juste pour Répondre à votre question, cette ligne de code est d'obtenir une référence de l'activité en appelant getActivity, jette à MainActivity et d'appeler la doPositive méthode de...
Vous devez vous connecter pour publier un commentaire.
Permet de les diviser:
getActivity()
peut être utilisé dans un Fragment pour obtenir le parentActivity
de laFragment
(essentiellement de l'Activité qui affiche le Fragment).((MainActivity) getActivity())
en outre de convertir le résultat degetActivity()
à MainActivity. Généralement, vous savez quegetActivity()
retourne un objet de typeActivity
, mais en utilisant cette cast, vous dire au compilateur que vous êtes sûr que l'objet est une sous-classe spécifique deActivity
, à savoirMainActivity
. Vous avez besoin de le faire dans votre cas, parce quedoPositiveClick()
n'est mise en œuvre dansMainActivity
, et pas dansActivity
, donc vous devez vous assurer que le compilateur l'objet est unMainActivity
, et il répondra à la méthodedoPositiveClick()
.doPositiveClick()
appelle simplement la méthode sur leMainActivity
objet qui est retourné pargetActivity()
.Fragment
. Dans quelle classe êtes-vous essayer de l'appeler?L'approche que vous utilisez n'est pas la meilleure façon d'accomplir ce que vous voulez faire. Android avoir un bon soutien pour les auditeurs, et de communiquer avec les fragments. Donc, permet de voir comment communiquer fragment->activité de la direction.
Tout d'abord, vous avez besoin pour faire de votre MainActivity un écouteur de ce qui se passe sur une zone de dialogue, de sorte que le meilleur moyen pour ce faire est la mise en œuvre de DialogInterface.OnClickListener sur votre MainActivity et remplacer le onClick(DialogInterface dialog, int qui) méthode, cette méthode sera appelée à partir de votre fragmen. Jusqu'à maintenant, tout est fait dans votre MainActivity.
Maintenant, dans votre fragment, vous devez remplacer la onAttach(activité Activité) méthode, c'est la première méthode appelée lorsque le fragment est construit, et cette méthode est livré avec nos Activité parent, à l'intérieur de cette méthode initialiser le port d'écoute de votre fragment (votre MainActivity).
Votre fragment devrait ressembler à ceci:
Et votre activité principale onClick() la méthode devrait ressembler à ceci:
C'est la meilleure approche pour faire ce que vous voulez faire, oublier "dur" jeté votre classe MainActivity. Espère que cela vous aide!
Je crois que vous pouvez juste faire
((MainActivity)getActivity()) est juste en train de l'activité et de la coulée que pour être MainActivity..
MainActivity
instance.Lorsque vous utilisez
fragments
c'est la seule façon de les mettre en contexte. Comme ci-dessus, vous utilisezDialogFragment
et dansOnClickListener
il est nécessaire de contexte.public final Activity getActivity()
- Retour à l'Activité, ce fragment est actuellement associés.Pour votre code, dans
TaxDialog
qui est l'extension deDialogFragment
besoin d'un contexte pour créerAlertDialog
avecAlertDialog.Builder
. Donc, ici,getActivity()
comme un paramètre dansAlertDialog.Builder
passe commecontext
qui raconte àAlertDialog
Fragment que par l'activité de qui il est attaché.getActivity()
est définie par l'utilisateur?