如何从底表导航片段移动到其他片段

时间:2020-04-27 10:36:38

标签: java android android-fragments bottom-sheet bottomappbar

我在其中声明了Bottom应用程序栏的类的代码为:

import PageNav from '@/components/PageNav.vue';
import PageFooter from '@/components/PageFooter.vue';

export default {
  name: 'Groups',
  components: {
    PageNav,
    PageFooter,
  },
  data() {
    return {
      groups: [],
      error: '',
    };
  },
  methods: {
    fetchGroups() {
      const url = 'http://localhost:3000/groups';
      this.groups = [];
      fetch(url)
        .then((response) => {
          if (response.status === 200) {
            return response.json();
          }
          throw new Error(`Meh, error! Status ${response.status}`);
        })
        .then((groups) => {
          this.groups = groups;
        })
        .catch((error) => {
          this.error = error;
        });
    },
    removeGroup(groupId) {
      const url = `http://localhost:3000/groups/${groupId}`;
      fetch(url, {
        method: 'DELETE',
      })
        .then(() => {
          this.groups = [];
          this.fetchGroups();
        })
        .catch((error) => {
          this.error = error;
        });
    },
   Add() {
    const inputName = document.getElementById('groepnaam');
    const group = { id: this.groups.length + 1, name: inputName.value };
    if (inputName.value === '') {
      window.alert('Vul een naam in!');
    } else {
      fetch('http://localhost:3000/groups',
        {
          method: 'POST',
          body: JSON.stringify(group),
          headers: {
            'Content-Type': 'application/json',
          },
        })
        .then(() => {
          this.groups = [];
          this.fetchGroups();
        })
        .then((response) => {
          if (response.status === 201) {
            return response.json();
          }
          throw new Error();
        });
    }
   }
  },
  created() {
    this.fetchGroups();
  },
};

“底页导航片段”的代码是:

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class NavigActivity extends AppCompatActivity {

    private BottomAppBar mbottomAppBar;
    private FloatingActionButton fab;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navig);
        mbottomAppBar = findViewById(R.id.bottom_app_bar);
        setSupportActionBar(mbottomAppBar);
        fab= findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Fragment fragment = new AddNewProductFragment();
                FragmentManager fragmentManager = getSupportFragmentManager();
                FragmentTransaction ft = fragmentManager.beginTransaction();
                ft.addToBackStack(null);
                ft.replace(R.id.content_frame, fragment);
                ft.commit();
            }
        });

       mbottomAppBar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
           @Override
           public boolean onMenuItemClick(MenuItem item) {
               Fragment fragment = null;
              switch (item.getItemId())
              {
                  case R.id.home:
                        fragment = new HomeFragment();
                      break;
                  case R.id.notification:
                        fragment = new NotificationFragment();
                      break;
                  case R.id.my_invoices:
                      fragment = new InvoiceFragment();
                      break;
              }
              if(fragment != null)
              {
                  FragmentManager fragmentManager = getSupportFragmentManager();
                  FragmentTransaction ft = fragmentManager.beginTransaction();
                  ft.replace(R.id.content_frame, fragment);
                  ft.commit();
              }
              return false;
           }
       });
        mbottomAppBar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //open bottom sheet
                BottomSheetDialogFragment bottomSheetDialogFragment = BottomSheetNavigationFragment.newInstance();
                bottomSheetDialogFragment.show(getSupportFragmentManager(), "Bottom Sheet Dialog Fragment");
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.menu,menu);
        return true;
    }
}

我无法理解如何将屏幕从此移至其他片段-因为getSupportFragmentManager()在此中不可用。当我尝试生成意图时,会引发错误。

任何建议或帮助都将受到赞赏。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用可变活动。像这样在附件片段时声明它:

 private AppCompatActivity activity;

    @Override
     public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    if (context instanceof AppCompatActivity) {
        activity = (AppCompatActivity) context;
    }
  }

以及

之后
/.../

activity.getSupportFragmentManager /...some logic.../