Java 带有TabLayout和ViewPager的片段
目前,我有两个选项卡(两个片段)的MainActivity和三项菜单的导航视图。 我现在只有一个带标签的活动。在MainActivity中,我初始化了工具栏、NavigationView、ViewPager和TableLayout。这里还有一个适配器实例,它为选项卡创建片段 当我选择菜单项中的一个时,我希望它打开一个带有两个其他选项卡(带有两个其他片段)的新片段 如何用碎片实现它? 或者更好地使用额外的活动 活动\u主\u xml: 语音表片段适配器Java 带有TabLayout和ViewPager的片段,java,android,android-fragments,Java,Android,Android Fragments,目前,我有两个选项卡(两个片段)的MainActivity和三项菜单的导航视图。 我现在只有一个带标签的活动。在MainActivity中,我初始化了工具栏、NavigationView、ViewPager和TableLayout。这里还有一个适配器实例,它为选项卡创建片段 当我选择菜单项中的一个时,我希望它打开一个带有两个其他选项卡(带有两个其他片段)的新片段 如何用碎片实现它? 或者更好地使用额外的活动 活动\u主\u xml: 语音表片段适配器 package ru.alexb
package ru.alexbykov.sailesstat.statistic.adapter;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.HashMap;
import java.util.Map;
import ru.alexbykov.sailesstat.statistic.fragments.AbstractTabFragment;
import ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale.ManagersFragment;
import ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale.PlanFragment;
/**
* Created by Alexey on 09.06.2016.
*/
public class TheSalesTabsFragmentAdapter extends FragmentPagerAdapter {
//for use strings
private Context context;
private Map<Integer, AbstractTabFragment> tabs;
public TheSalesTabsFragmentAdapter(Context context, FragmentManager fm) {
super(fm);
this.context = context;
initTabs();
}
@Override
public Fragment getItem(int position) {
return tabs.get(position);
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
return tabs.get(position).getTitle();
}
private void initTabs() {
tabs = new HashMap<>();
tabs.put(0, PlanFragment.getInstance(context));
tabs.put(1, ManagersFragment.getInstance(context));
}
}
PlanFragment
package ru.alexbykov.sailesstat.statistic.fragments;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.view.View;
public class AbstractTabFragment extends Fragment {
private String title;
protected Context context;
protected View view;
public void setTitle(String title) {
this.title = title;
}
public void setContext(Context context) {
this.context=context;
}
public String getTitle() {
return title;
}
}
package ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import ru.alexbykov.sailesstat.R;
import ru.alexbykov.sailesstat.statistic.fragments.AbstractTabFragment;
/**
* A simple {@link Fragment} subclass.
*/
public class PlanFragment extends AbstractTabFragment {
private static final int LAYOUT = R.layout.fragment_plan;
public static PlanFragment getInstance(Context context) {
/* Bundle bundle = new Bundle();
fragment.setArguments(bundle);*/
PlanFragment fragment = new PlanFragment();
fragment.setContext(context);
fragment.setTitle(context.getString(R.string.tab_plan_stat_fragment));
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(LAYOUT, container, false);
return view;
}
}
package ru.alexbykov.sailesstat.statistic.fragments;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.view.View;
public class AbstractTabFragment extends Fragment {
private String title;
protected Context context;
protected View view;
public void setTitle(String title) {
this.title = title;
}
public void setContext(Context context) {
this.context=context;
}
public String getTitle() {
return title;
}
}
AbstractTabFragment
package ru.alexbykov.sailesstat.statistic.fragments;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.view.View;
public class AbstractTabFragment extends Fragment {
private String title;
protected Context context;
protected View view;
public void setTitle(String title) {
this.title = title;
}
public void setContext(Context context) {
this.context=context;
}
public String getTitle() {
return title;
}
}
package ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import ru.alexbykov.sailesstat.R;
import ru.alexbykov.sailesstat.statistic.fragments.AbstractTabFragment;
/**
* A simple {@link Fragment} subclass.
*/
public class PlanFragment extends AbstractTabFragment {
private static final int LAYOUT = R.layout.fragment_plan;
public static PlanFragment getInstance(Context context) {
/* Bundle bundle = new Bundle();
fragment.setArguments(bundle);*/
PlanFragment fragment = new PlanFragment();
fragment.setContext(context);
fragment.setTitle(context.getString(R.string.tab_plan_stat_fragment));
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(LAYOUT, container, false);
return view;
}
}
package ru.alexbykov.sailesstat.statistic.fragments;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.view.View;
public class AbstractTabFragment extends Fragment {
private String title;
protected Context context;
protected View view;
public void setTitle(String title) {
this.title = title;
}
public void setContext(Context context) {
this.context=context;
}
public String getTitle() {
return title;
}
}
与NavigationView一样,先发片段并不是最佳实践。我建议使用按钮切换活动,完全不使用片段。如果我没弄错的话,你的主页上有内容,我会在其中添加三个按钮,每个按钮都是为了在NavigationView的leiu中启动另一个活动。这些活动中的每一个都有自己的按钮,这些按钮将引导您进入您想从那里进入的任何活动。首先进入的片段并不像NavigationView那样是最佳实践。我建议使用按钮切换活动,完全不使用片段。如果我没弄错的话,你的主页上有内容,我会在其中添加三个按钮,每个按钮都是为了在NavigationView的leiu中启动另一个活动。这些活动中的每一项都有自己的按钮,这些按钮将引导您进入任何您想从那里进入的活动。我有一个包含内容的主页(图2)。此页面是在应用程序启动时创建的。为什么使用片段和NavigationView不是一个好的实践?是的,这些都是好的,这就是你要从中启动其他活动的地方。片段通常仅在您为手机和平板电脑定制应用程序时使用。在手机上,它们是全屏的,而在平板电脑上,它们显示为屏幕空间的分割(想想苹果的设置页面)。一般来说,他们更难相处,所以人们普遍认为,拥有他们是毫无意义的。NavigationViews被视为一种懒惰的编程实践,因为它很容易将一堆选项粘在其中,并迷惑用户(老Spotify就是这样,他们最终切换了),感谢您的回答。但无论如何,我这样做是为了学习。我想了解如何通过在一个片段中使用选项卡和片段来实现这一点。(由用户在导航菜单中选择)这是值得称赞的。如果您使用意图来更改活动,那么本质上它是一个类似的操作,但是您将使用一个名为replace的方法。下面是FragmentTransaction类的文档,其中包括:我有一个包含内容的主页(图2)。此页面是在应用程序启动时创建的。为什么使用片段和NavigationView不是一个好的实践?是的,这些都是好的,这就是你要从中启动其他活动的地方。片段通常仅在您为手机和平板电脑定制应用程序时使用。在手机上,它们是全屏的,而在平板电脑上,它们显示为屏幕空间的分割(想想苹果的设置页面)。一般来说,他们更难相处,所以人们普遍认为,拥有他们是毫无意义的。NavigationViews被视为一种懒惰的编程实践,因为它很容易将一堆选项粘在其中,并迷惑用户(老Spotify就是这样,他们最终切换了),感谢您的回答。但无论如何,我这样做是为了学习。我想了解如何通过在一个片段中使用选项卡和片段来实现这一点。(由用户在导航菜单中选择)这是值得称赞的。如果您使用意图来更改活动,那么本质上它是一个类似的操作,但是您将使用一个名为replace的方法。以下是FragmentTransaction类的文档,其中包括: