android - 不使用 ViewPager for TableLayout 在活动中调用片段
问题描述
嗨,在下面的活动中,我有一个名为机会的底部导航项。当我单击要调用的机会时 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);
解决方案
这应该是您的 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,您可能希望使用 Fragments。创建 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;
}
}
推荐阅读
- traefik - 升级到 v2(Traefik 代理)后,Portainer 不再显示图标
- javascript - 创建后如何使每个正方形(div)下落(如重力)
- python - SPACY - 关于词向量和 tok2vec 的混淆
- c++ - 用于 DNS 更改通知的 Windows API
- javascript - 如何访问和更新嵌套的 Mongoose 文档
- python - 获取第二个窗口 tkinter 使用的根窗口的图标
- r - 将寓言中的点预测从指数格式转换为正常数字
- java - Spock:Class Cast Exception,但适用于真实通话
- angular - 在视图初始化之前引用时未定义 ViewChild 元素
- python - discord.ext.commands.errors.ExtensionFailed:扩展 'cogs.fun' 引发错误:IndentationError:期望缩进块(fun.py,第 7 行)