Что вернуться к первому виду / корневому виду - PullRequest
0 голосов
/ 26 апреля 2019

Привет, я новичок в 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: бесплатная обрезка изображения Единственное, что сильно отличается, и проблема, которая вызывает у меня то, что мое приложение использует фрагмент, а код, которого нет в ссылке

Результат, который нужно получить, будет либо переходить к следующему просмотру с фрагментом, либо полностью возвращаться к корневому просмотру с фрагментом.результат, который я получаю: приложение продолжает падать и не может вернуться к корневому представлению, а затем происходит сбой приложения. Это сообщение об ошибке, которое я получаю

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)

1 Ответ

0 голосов
/ 26 апреля 2019

Это простой метод, используемый для добавления фрагмента в 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();

Теперь, для части, которую вы сказали

Результат, который нужно получить, будет либо переходить к следующему просмотру с фрагментом, либо полностью возвращаться к корневому просмотру с фрагментом.

вы можете указать собственное условие, когда вы хотите перейти к фрагменту, который вы хотите перейти, или вместо этого перейти к родительскому представлению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...