从活动移至底部导航的特定选项卡

时间:2018-10-17 15:25:08

标签: android android-activity fragment

我正在使用底部导航栏的项目中工作。在导航栏上,我使用了4个菜单项(“个人资料”,“主页”,“预定”,“注销”),为此我使用了片段。 转到首页,将显示餐厅列表。当用户点击列表中的任何餐厅时,将打开一个活动(名称ReservationInfo)。 ReservationInfo活动中有3个编辑文本字段和一个按钮。当用户单击按钮时,它将移动到位于底部导航栏第三位置的片段(保留)。

问题是如何从活动移到片段,并将片段设置到底部导航栏的第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 :(得分:1)

解决方案:

请遵循以下步骤:

第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);

}

尝试一下,如果有任何问题,请在下面进行评论。

答案 1 :(得分:0)

您需要做的就是,当用户从您的家庭片段中选择一家餐馆时,只需使用startActivityForResults而不是startActivity

例如:

startActivityForResult(yourIntent, 1000);

onClick函数中的ReservationInfo活动上,使用

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);
}

}