繁体   English   中英

弹出片段后台后显示小吃吧

[英]Show snackbar after popping fragment backstack

我正在尝试在一个片段中执行操作,然后移动到前一个片段并显示带有消息的快餐栏,确认第一个片段中的操作。 然而,我正在创建并显示第一个片段(我正在移动的那个)中的小吃吧,并且小吃栏没有出现在我正在改变的片段中,可能是因为它显示在片段中我正在移动从。

我在alertdialog中执行代码:

builder.setPositiveButton(positiveText, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dbHandler.deleteExercise(exercise.getId());

                    // Making the snackbar here did not work, either.

                    getFragmentManager().popBackStack();

                    Snackbar snack = Snackbar.make(mainLayout, "Exercise deleted", Snackbar.LENGTH_SHORT);
                    snack.show();
                }
            });

知道如何实现这个目标吗?

谢谢!

编辑:

我做了这个令人难以置信的原始绘图流程,使我更清楚我想要实现的目标。

我最终通过主ActivityFragments之间实现消息传递,并在片段的onResume()方法中检查消息:

主要活动:

private String fragmentTransactionMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        // Snip

        // Initialize fragment transaction message
        fragmentTransactionMessage = null;

        // Snip
    }

    // Three methods used to send information (text) between fragments
    public void setFragmentTransactionMessage(String message) {
        this.fragmentTransactionMessage = message;
    }

    public String getFragmentTransactionMessage() {
        return fragmentTransactionMessage;
    }

    public void resetFragmentTransactionMessage() {
        this.fragmentTransactionMessage = null;
    }

片段2:

// Remove exercise from database
dbHandler.deleteExercise(exercise.getId());

// Update message in main activity
((MainActivity)getActivity()).setFragmentTransactionMessage("Item deleted");

// Move to previous fragment
getFragmentManager().popBackStack();

片段1:

@Override
public void onResume() {
    super.onResume();

    // Check for messages in main activity
    String message = ((MainActivity)getActivity()).getFragmentTransactionMessage();

    // If any, display as snackbar
    if(message != null) {
        Snackbar snack = Snackbar.make(mainLayout, message, Snackbar.LENGTH_SHORT);
        snack.show();

        // Reset message in activity
        ((MainActivity)getActivity()).resetFragmentTransactionMessage();
    }
}

另一个建议是包装getFragmentManager().popBackStack(); 采用Runnable Obj的方法,该方法将在选定的延迟后运行

例如:

public void goBack(Runnable runAfterBack, long delay) {
    mFragmentActivity.onBackPressed();
    if (runAfterBack != null) { 
    (new Handler(Looper.getMainLooper())).postDelayed(runAfterBack, delay);
     }
   }

用法:

goBack(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(mActivity, "STRING", Toast.LENGTH_SHORT).show();}
        }, 1500);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM