Перейти к определенной вкладке нижней навигации из действия - PullRequest
0 голосов
/ 17 октября 2018

Я работаю над проектом, в котором я использовал нижнюю панель навигации.На панели навигации я использовал 4 пункта меню (Профиль, Дом, Резервирование, Выход из системы), для них я использовал фрагмент.Переезд в дом, появится список ресторанов.Когда пользователь нажимает на любой ресторан из списка, открывается действие (имя ReservationInfo).В деятельности ReservationInfo есть 3 поля для редактирования текста и кнопка.Когда пользователь нажимает на кнопку, он перемещается к фрагменту (Reservation), который находится на третьей позиции нижней навигационной панели.

Вопрос в том, как перейти от действия к фрагменту, а фрагменту присвоено 3-еПункт меню нижней панели навигации.

Вот код:

Resrvation.java

package restaurantlocator.application;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;


public class Resrvation extends AppCompatActivity {

    Button reserve;
    ImageButton imageButton;
    EditText food, chooseTime, date;
    DataBaseHelper db;
//  ReservationInfo reservationInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resrvation);
        db = new DataBaseHelper(this);

        food = (EditText) findViewById(R.id.etfood);
        chooseTime = (EditText) findViewById(R.id.ettime);
        date = (EditText) findViewById(R.id.edate);
        reserve = (Button) findViewById(R.id.btnreserve);
        imageButton = (ImageButton) findViewById(R.id.imgButton);
        imageButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                finish();
            }
        });

        //reservationInfo = new ReservationInfo();

        reserve.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!emptyValidation()) {
                    db.AddData(new Data(food.getText().toString(),
                            chooseTime.getText().toString(),
                            date.getText().toString()));
                    AlertMessage();
                    food.setText(null);
                    chooseTime.setText(null);
                    date.setText(null);

                } else {
                    Toast.makeText(Resrvation.this, "Empty Fields", Toast.LENGTH_SHORT).show();
                }
            }

            private void AlertMessage() {
                AlertDialog.Builder builder = new AlertDialog.Builder(Resrvation.this);
                builder.setTitle("Reserved!");
                builder.setMessage("A notification will be send on your device regarding your reservation.");
                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                            //move to fragment ReservationInfo
                    }
                });
                builder.show();
            }
        });
    }

    private boolean emptyValidation() {
        if (TextUtils.isEmpty(food.getText().toString()) || TextUtils.isEmpty(chooseTime.getText().toString())) {
            return true;
        } else {
            return false;
        }
    }
}

BottomNavigation.java

package restaurantlocator.application;

import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.widget.FrameLayout;

public class BottomNavigation extends AppCompatActivity {

    private BottomNavigationView mMianNav;
    private FrameLayout mMainFrame;
    private HomeActivity homeActivity;
    private ReservationInfo reservationInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bottom_navigation);
        startService(new Intent(this, NotificationService.class));

        mMainFrame = (FrameLayout) findViewById(R.id.main_frame);
        mMianNav = (BottomNavigationView) findViewById(R.id.main_nav);

        homeActivity = new HomeActivity();
        reservationInfo = new ReservationInfo();
        setFragment(homeActivity);


        //Listener for handling selection events on bottom navigation items
        mMianNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

                switch (menuItem.getItemId()) {

                    case R.id.tohome:
                        setFragment(homeActivity);
                        return true;

                    case R.id.toresrvation:
                        setFragment(reservationInfo);
                        return true;

                    case R.id.tologout:
                        logout();
                        return true;

                    default:
                        return false;
                }
            }

            private void logout() {
                Intent intent = new Intent(BottomNavigation.this, Registration.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(intent);
                finish();
            }

        });
    }

    private void setFragment(Fragment fragment) {
        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.main_frame, fragment);
        fragmentTransaction.commit();
        fragmentTransaction.addToBackStack(null);
    }

    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory(Intent.CATEGORY_HOME);
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
        finish();

    }

}

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Решение:

Выполните следующие действия:

Шаг 1: Добавьте строки, как показано ниже reserve щелкните прослушиватель

reserve.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ....
        ....
        Intent intent = new Intent(Resrvation.this, BottomNavigation.class);
        intent.putExtra("FromReservation", "1");
        startActivity(intent);
        ....
    }
}

Далее, Step2: Введите свой код в onCreate() из BottomNavigation класса:

Intent i = getIntent();
String data = i.getStringExtra("FromReservation");

if (data != null && data.contentEquals("1")) {

    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    fragmentTransaction.replace(R.id.main_frame, new ReservationInfo());
    fragmentTransaction.commitNow();

    mMianNav.setSelectedItemId(R.id.toresrvation);

}

Попробуйте, если возникнут проблемы, сделайтекомментарий ниже.

0 голосов
/ 17 октября 2018

Все, что вам нужно сделать, это просто использовать startActivityForResults вместо startActivity, когда пользователь выбирает ресторан из вашего домашнего фрагмента.

, например:

startActivityForResult(yourIntent, 1000);

И в bookingInfoУпражнение в функции onClick использует

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

А затем в вашем первом занятии переопределите метод onActivityResult() и установите выбранный фрагмент в качестве резервирования, если код запроса соответствует

, например:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (requestCode == 1000) {
    mMianNav.setSelectedItemId(R.id.toresrvation);
}

}

...