我对android中Fragments
的使用不熟悉。
基本上我已经使用导航抽屉创建了一个幻灯片菜单。据我所知,所有菜单页面都是Fragment
。如果我点击home,我会转到HomeFragment扩展Fragment
类,它附加了它的片段布局。现在我想为主页实现选项卡布局。但要使用标签布局,我需要使用扩展FragmentActivity
的片段。我如何结合这两件事因为它们不兼容!
我是否需要创建管理主片段的Activity
?如果是,这是怎么做到的?
基本上我正在尝试将2个示例代码组合在一起。
所以我有一个班级
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class HomeFragment extends Fragment {
public Button btnLogout;
// Session Manager Class
public SessionManager session;
public HomeFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
return rootView;
}
}
和另一个班级
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import com.prjma.lovertech.R;
import com.prjma.lovertech.adapter.TabsPagerAdapter;
public class HomeActivity extends FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Top Rated", "Games", "Movies" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
我基本上需要合并它们。怎么样?
答案 0 :(得分:1)
只需使用viewpager
替换抽屉教程中的FrameLayout
即可
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
然后在您的活动中将所有代码组合在一起
它看起来像这样
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Framelayout to display Fragments -->
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- Listview to display slider menu -->
<ListView
android:id="@+id/list_slidermenu"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector"
android:background="@color/list_background"/>
</android.support.v4.widget.DrawerLayout>
答案 1 :(得分:0)
在您提供的第一个链接中,创作时使用FrameLayout
作为其片段的主要内容(调用add
,replace
时,...)。
在第二个中,他创建了一个活动并通过指定actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
来启用操作栏
如果你想合并Drawer
和ViewPager
,这取决于你想做什么,你必须有可能:
如果您的应用主要内容是带有标签的寻呼机,那么您只需要根据Tyczj在评论中建议的ViewPager
替换FrameLayout。
如果您希望带有标签的寻呼机位于片段中,请将HomeActivity
更改为HomeMainFragment
,以便处理ViewPager
初始化,并在您的{ {1}}(您必须创建它)将调用MainActivity
,调用片段管理器并使用setContentView(R.layout.activity_home)
方法,如下所示:
replace()
让我们为第二种方法添加一些代码。
MainActivity :fm.beginTransaction().replace(R.id.FRAME_LAYOUT_ID)
onCreate()
<强> HomeMainFragment 强>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
// ...
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, fragment).commit();
// ...
}