Не вызывать фрагмент в действии, используя ViewPager для TableLayout - PullRequest
0 голосов
/ 14 февраля 2020

Здравствуйте, в приведенном ниже упражнении у меня есть нижний элемент навигации, названный как возможность. Когда я нажимаю на возможность, хочу вызвать TabLayout содержит две вкладки с именами в качестве стадии продаж и необходимой поддержки.

Из действия, не вызывающего моего фрагменты.

Может ли кто-нибудь мне помочь

Активность. java:

public class MainActivity extends AppCompatActivity {
private DrawerLayout drawerLayout;
private Toolbar toolbar;

private RecyclerView recyclerView;
private RecyclerView.Adapter mAdapter;
private ProgressDialog progressDialog = null;
String sessionId;
private ViewPager viewPager;
MenuItem refreshMenuItem;
TabLayout tabLayout;
Fragment fragment;
private RecyclerView.LayoutManager layoutManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    sessionId = getIntent().getStringExtra("sessionId");
    toolbar = (Toolbar) findViewById(R.id.toolbar);

    toolbar.setTitle("Home");

    loadFragment(new TaskFragement());
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
    tabLayout.setupWithViewPager(viewPager);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);

    // use this setting to improve performance if you know that changes
    // in content do not change the layout size of the RecyclerView
    recyclerView.setHasFixedSize(true);


    // use a linear layout manager
   // layoutManager = new LinearLayoutManager(this);
    //recyclerView.setLayoutManager(layoutManager);

    //recyclerView.setAdapter(mAdapter);
    initNavigationDrawer();
    initBottomNavigationItems();

}



public void initNavigationDrawer() {

    NavigationView navigationView = (NavigationView)findViewById(R.id.navigation_view);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {

            int id = menuItem.getItemId();

            switch (id){
                case R.id.home:
                    Toast.makeText(getApplicationContext(),"Home",Toast.LENGTH_SHORT).show();
                    drawerLayout.closeDrawers();
                    break;
                case R.id.settings:
                    Toast.makeText(getApplicationContext(),"Settings",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.trash:
                    Toast.makeText(getApplicationContext(),"History",Toast.LENGTH_SHORT).show();
                    drawerLayout.closeDrawers();
                    break;
                case R.id.logout:
                    finish();

            }
            return true;
        }
    });
    View header = navigationView.getHeaderView(0);
    TextView tv_email = (TextView)header.findViewById(R.id.tv_email);
    tv_email.setText("GenWorks Solutions");
    drawerLayout = (DrawerLayout)findViewById(R.id.drawer);

    ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){

        @Override
        public void onDrawerClosed(View v){
            super.onDrawerClosed(v);
        }

        @Override
        public void onDrawerOpened(View v) {
            super.onDrawerOpened(v);
        }
    };
    drawerLayout.addDrawerListener(actionBarDrawerToggle);
    actionBarDrawerToggle.syncState();
}

public void initBottomNavigationItems() {


    BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);
    bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.task:
                    toolbar.setTitle("Task");
                    fragment = new TaskFragement();
                    loadFragment(fragment);
                    return true;
                case R.id.account:
                    toolbar.setTitle("Account");
                    fragment = new AccountFragement();
                    sessionId = getIntent().getStringExtra("sessionId");
                    loadFragment(fragment);
                    return true;
                case R.id.contact:
                    toolbar.setTitle("Contact");
                    fragment = new ContactFragment();
                    loadFragment(fragment);
                    return true;
                case R.id.opportunity:
                    toolbar.setTitle("Opportunity");
                    tabLayout.setVisibility(View.VISIBLE);
                    viewPager.setVisibility(View.VISIBLE);
                    return true;
            }
            return false;
        }
    });
}
private void loadFragment(Fragment fragment) {
    // load fragment
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.frame_container, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(),getApplicationContext());
    adapter.addFragment(new SalesStageFragment(), "Sales Stage");
    adapter.addFragment(new SupportFragment(), "Support Required");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager, Context applicationContext) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return new SalesStageFragment();
        } else if (position == 1) {
            return new SupportFragment();
        }
        return new SalesStageFragment();

    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

}

SalesStageFragment. java:

public class SalesStageFragment extends Fragment {
    private String title;
    private int page;

    public SalesStageFragment(){

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Opportunities List");
        View rootView = inflater.inflate(R.layout.opportunity, container, false);

SupportFragment. java:

public class SupportFragment extends Fragment {
        private String title;
        private int page;

        public SalesStageFragment(){

        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            // Inflate the layout for this fragment

            ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Opportunities List");
            View rootView = inflater.inflate(R.layout.support, container, false);

1 Ответ

0 голосов
/ 14 февраля 2020

Это должен быть ваш класс ViewPagerAdapter

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

private final Context mContext;

    @StringRes
    private static final int[] TAB_TITLES = new int[]{R.string.sales_stage, R.string.support_required};

    public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior, Context context) {
        super(fm, behavior);
        this.mContext = context;
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return new SalesStageFragment();
        } else if (position == 1) {
            return new SupportFragment();
        }
        return new SalesStageFragment();
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return mContext.getResources().getString(TAB_TITLES[position]);
    }

    @Override
    public int getCount() {
        return 2;
    }
}

Учитывая, что вы используете BottomNavigation, вам нужно использовать фрагменты. Создайте HomeFragment, так как именно здесь вы будете размещать TabLayout.

public class HomeFragment extends Fragment {

    @BindView(R.id.tab_layout)
    TabLayout mTabLayout;
    @BindView(R.id.view_pager)
    ViewPager mViewPager;

    private Context mContext;


    public HomeFragment() {
        // Required empty public constructor
    }

    public static HomeFragment newInstance() {
        return new HomeFragment();
    }


    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, getActivity());

        mViewPager.setAdapter(adapter);
        mTabLayout.setupWithViewPager(mViewPager);

        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        mContext = context;
    }
}
...