Problème de transfert de données de fragment et d'activité

Ecrire devant

Dans les projets récents, fonction du cercle d'amis rencontrés, le module du cercle d'amis est imbriqué dans le Fragment, lors de la publication d'une activité, passez à une autre Activité, et revenez à ce Fragment après la publication. Après le retour, je n'ai pas demandé l'actualisation de l'arrière-plan, mais j'ai renvoyé les informations relatives à la dynamique publiées par l'utilisateur au fragment via l'intention.

Documents connexes

1. Activité qui contient Fragment, InformixActivity
2. Publiez l'activité qui remplit les informations dynamiques, AddDynamicActivity
3. Fragment, ForumFragment où se trouve le cercle d'amis

Processus d'affaires

L'utilisateur clique sur le bouton de publication de l'ActionBar dans le Fragment of Moments.
Accédez à la page de remplissage dynamique, AddDynamicActivity . Après avoir rempli la page, cliquez sur Publier ou sur Annuler pour revenir au fragment Moments of Friends.
Lors du retour du fragment, les données doivent être transmises via InformixActivity avant de pouvoir être transmises avec succès.

Code principal

  1. Dans InformixActivity , cliquez sur le bouton publier
(findViewById(R.id.homeTV)).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        Intent intent = new Intent(InformixActivity.this, AddDynamicActivity.class);
                        // 将要跳转的发布动态Activity会携带数据返回当前Activity
                        startActivityForResult(intent, 1);
                    }
                });

Passez ici par la méthode startActivityForResult . Le deuxième paramètre est requestCode, afin de déterminer le résultat de retour. Cette méthode peut ramener les données à l'activité avant le saut après avoir accédé à la nouvelle activité et après la fermeture de la nouvelle activité.
Il convient de noter que pour obtenir les données renvoyées, la méthode onActivityResult doit être réécrite dans l'activité d'origine, c'est-à-dire InformixActivity , qui sera décrite plus loin.

  1. Dans AddDynamicActivity , réécrivez les méthodes des boutons gauche et droit d'ActionBar pour respectivement annuler et partager.
private void actionBarOnClick(){
        // 重写取消点击事件
        cancelBar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 回调onActivityResult
                Intent intent = new Intent();
                Bundle dynamic = new Bundle();
                dynamic.putString("CONTENT", "");
                intent.putExtra("DYNAMIC",dynamic);
                setResult(1, intent);
                AddDynamicActivity.this.finish();
            }
        });
        // 重写分享点击事件
        shareBar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 携带数据返回上个Activity栈
                Intent intent = new Intent();
                Bundle dynamic = new Bundle();
                // 判断发布分享的内容是否为空
                if (dynamicContent.getText().toString().trim().length() > 0) {
                    dynamic.putString("CONTENT", dynamicContent.getText().toString().trim());
                    dynamic.putString("TIME", getFormatSysDate("yyyy-MM-dd HH:mm:ss"));
                    intent.putExtra("DYNAMIC", dynamic);
                }else {
                    // 如果发布内容为空,点击分享和点击取消一样
                    dynamic.putString("CONTENT", "");
                    intent.putExtra("DYNAMIC",dynamic);
                }
                setResult(1, intent);
                AddDynamicActivity.this.finish();
            }
        });
    }

Comme vous pouvez le voir dans le code ci-dessus, il existe une méthode ** setResult () **. Le premier paramètre est requestCode, qui est utilisé pour marquer que le résultat retourné doit être renvoyé à l'activité avec le même requestCode.
Dans le code ci-dessus, j'ai écrit la méthode de publication et d'annulation. Le résultat de la publication dynamique vide et de l'annulation est le même. Il est jugé par la valeur de "CONTENT" du Bundle qui renvoie les données.

  1. Ramenez le résultat sur la page InformixActivity et remplacez la méthode onActivityResult .
/**
     * 获取AddDynamicActivity返回的数据
     *
     * Ps:先返回到Activity,然后再从当前Activity传递数据到需要的Fragment
     *
     * @param requestCode 请求码
     * @param resultCode 返回码
     * @param data 数据
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        // 跳转到朋友圈的onActivityResult
        forumFrag.onActivityResult(requestCode, resultCode, data);
    }

Dans la méthode onActivityResult , appelez la méthode onActivityResult de ForumFragment pour obtenir les données transportées dans le fragment.

4. Remplacer la onActivityResult méthode dans ForumFragment .

/**
     * 获取返回的数据,在Fragment向Activity请求,需要先返回到父Activity,然后传递到Fragment
     * @param requestCode 请求码
     * @param resultCode 返回码
     * @param data 数据
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1){
            // 判断发布内容是否为空,是否是取消按钮
            if (!"".equals(data.getBundleExtra("DYNAMIC").getString("CONTENT"))){
                Map<String, String> addDynamic = new HashMap<>();
                addDynamic.put("CREATEUSER", GlobalField.getUser().getName());
                addDynamic.put("XWNR", data.getBundleExtra("DYNAMIC").getString("CONTENT"));
                addDynamic.put("TPID", "");
                addDynamic.put("CREATEDATE", data.getBundleExtra("DYNAMIC").getString("TIME"));
                // 把发布的动态插入数据库
                setDynamicData(addDynamic);
            }
        }
    }

Dans ce qui précède, via requestCode pour déterminer que ce sont les données dont nous avons besoin, nous pouvons effectuer les opérations dont nous avons besoin.

Ecrire à la fin

Le processus de transfert de données entre un fragment d'une activité et une autre activité est probablement comme ça.

Je suis Xiaobai, quel est le problème, veuillez me corriger.

Je suppose que tu aimes

Origine blog.csdn.net/A_Intelligence/article/details/85005990
conseillé
Classement