回到第一视图/根视图的内容 - java

嗨,我是android新手,如果有人能够帮助我解决此问题,将不胜感激。现在我正在尝试回到上一个视图或根视图,有人知道如何从静态上下文返回到上一个视图(我不确定静态上下文是否是正确的说法,如果有的话可以随时纠正我)我错了)?

我已经尝试创建FragmentManager了,之所以使用它,是因为我要创建的应用程序使用了Fragment。

 FragmentManager fragmentManager = 
 ((FragmentActivity)mContext).getSupportFragmentManager();
            fragmentManager.popBackStack();

`

public class SomeView1 extends View implements View.OnTouchListener {


public SomeView1(Context c) {
    super(c);

    mContext = c;
    setFocusable(true);
    setFocusableInTouchMode(true);

    this.setOnTouchListener(this);

}

public SomeView1(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;

}

public void foodPortionCal() {

    final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
    builder.setTitle("Output");
    builder.setMessage("Message here");

    builder.setCancelable(true);

    builder.setNegativeButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            sqLiteHelper.insertDataFood(GlobalVariable.mealTypeF, String.format("%.2f", totalProteinPer) + '%', String.format("%.2f", totalGrainsPer) + '%', String.format("%.2f", totalVegetablePer) + '%', String.format("%.2f", totalFruitPer) + '%', String.format("%.2f", totalDairyPer) + '%', GlobalVariable.dataF);
            Toast.makeText(mContext, "Added", Toast.LENGTH_SHORT).show();
            //this is where I want to set the feature to remove the view/static context?
            FragmentManager fragmentManager = ((FragmentActivity)mContext).getSupportFragmentManager();
            fragmentManager.popBackStack();


            dialog.dismiss();


        }
    });

    builder.show();


  }
}

//Before going the code will move to someview1 we will be in a fragment class called FoodFragment and this is how it look like

public class Food_Cal extends Fragment {

    private void mealTypeSelection()
    {
    //this is how I call the come view activity
            getActivity().setContentView(new SomeView1(view.getContext()));


    }

}

//这是此应用程序构造方式的链接Android: Free Cropping of Image
唯一最大的不同是,我的应用使用片段,而引用没有

想要得到的结果是要么将其移动到带有片段的下一个视图,要么一直返回到带有片段的根视图。我得到的结果是应用程序不断崩溃并且无法返回到根视图,然后应用程序崩溃这是我得到的错误消息

2019-04-27 00:35:36.599 624-624/apd.bii.diabetesappv1 E/AndroidRuntime: FATAL EXCEPTION: main
Process: apd.bii.diabetesappv1, PID: 624
java.lang.ClassCastException: android.view.ContextThemeWrapper cannot be cast to android.support.v4.app.FragmentActivity
    at apd.bii.diabetesappv1.FoodCalculation.SomeView1$1.onClick(SomeView1.java:437)
    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:173)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6894)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)

参考方案

这是用于将片段添加到您的FragmentManger中的简单方法,因此它是可见的。您需要做的就是将要添加的片段传递到屏幕上。

public void addScreen(Fragment fragment) {
    getSupportManager()
        .beginTransaction()
        .replace(R.id.container, fragment)
        .addToBackStack(null)
        .commit();
    screensOnTheStack++;
}

当您想将该片段从堆栈中弹出并转到父视图时,

while (screensOnTheStack > 0) {
        fragments.popBackStackImmediate();
    }

或者只是通过定义片段TAG来确定root(parent) fragment,例如

private static final String BACK_STACK_ROOT_TAG = "root_fragment";

然后


    // Pop off everything up to and including the current tab
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.popBackStack(BACK_STACK_ROOT_TAG, FragmentManager.POP_BACK_STACK_INCLUSIVE);

    // Add the new tab fragment
    fragmentManager.beginTransaction()
        .replace(R.id.container, TabFragment.newInstance())
        .addToBackStack(BACK_STACK_ROOT_TAG)
        .commit();

现在,对于你所说的部分

想要得到的结果是要么将其移动到带有片段的下一个视图,要么一直返回到带有片段的根视图。

您可以设置自己的条件,以决定何时要转到想要的片段或转到父视图。

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…

Java:从类中查找项目名称 - java

仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…

单击后退按钮时,滑行加载的图像会重置 - java

我正在滑行加载图像。但是问题是,当我们按下后退按钮时,从视图中清除加载的图像。无论我在活动图像视图中还是在recyclerview中加载图像,我都面临着这个问题。我正在加载图像GlideApp.with(this) .load(url) .into(mToolbarAvatar); 参考方案 在代码中添加两行.skipMemoryCache(true) .d…