ANSWER :在这里,大师们非常感谢你们,让我觉得我走错了路。我发现了一个类似的问题,拯救了我的屁股,并带我大约10来得到我的狗屎收集... 在这里你去: How to implement a ViewPager with different Fragments / Layouts
问题:
我知道这里有一些关于碎片的问题,但我没有在那里找到答案。
我正在尝试将三个片段连接到CalendarActivity。我认为最好在代码中解释。
我得到的错误:http://postimg.org/image/aca9ndfdb/ 我尝试了很多不同的进口,但我不能想象如何实现这一点,所以会很感激一些帮助。 如果我在创建fragmentMananger / fragmentTransaction时删除 android.app ,我会得到:http://postimg.org/image/dy2av2zp9/
这是CalendarActicity
package ru.calendar;
import android.app.ActionBar;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import jBerry.MySugar.R;
public class CalendarActivity extends FragmentActivity implements TabListener {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_calendar);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
FragmentA frag = new FragmentA();
fragmentTransaction.replace(android.R.id.content, frag);
fragmentTransaction.commit();
ActionBar actionBar;
ViewPager viewPager;
viewPager = (ViewPager) findViewById(R.id.calendarContainer);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
actionBar.setSelectedNavigationItem(arg0);
// Intent intent = new Intent(this, CalendarActivity.class);
// startActivity(intent);
Log.d("DpoiNT", "onPageSelected at " + " position " + arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// Log.d("DpoiNT", "onPageScrolled at "+" position " +arg0+" from " +arg1+" with number of pixels "+arg2);
}
@Override
public void onPageScrollStateChanged(int arg0) {
if(arg0== ViewPager.SCROLL_STATE_IDLE){
Log.d("DpoiNT", "onPageScrollStateChanged Idle");
}
if(arg0== ViewPager.SCROLL_STATE_DRAGGING){
Log.d("DpoiNT", "onPageScrollStateChanged Dragging");
}
if(arg0== ViewPager.SCROLL_STATE_SETTLING){
Log.d("DpoiNT", "onPageScrollStateChanged Settling");
}
}
});
actionBar = getActionBar();
assert actionBar != null;
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1=actionBar.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);
ActionBar.Tab tab2=actionBar.newTab();
tab2.setText("Tab 2");
tab2.setTabListener(this);
ActionBar.Tab tab3=actionBar.newTab();
tab3.setText("Tab 3");
tab3.setTabListener(this);
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// Log.d("DpoiNT", "onTabSelected at "+" position " +tab.getPosition()+" name "+tab.getText());
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// Log.d("DpoiNT", "onTabUnselected at "+" position " +tab.getPosition()+" name "+tab.getText());
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
// Log.d("DpoiNT", "onTabReselected at "+" position "+tab.getPosition()+" name "+tab.getText());
}
}
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
Fragment fragment=null;
if(arg0 == 0) {
fragment = new FragmentA();
}
if(arg0 == 1) {
fragment = new FragmentB();
}
if(arg0 == 2) {
fragment = new FragmentC();
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
}
这是CalendarActivity(activity_calendar)的xml:
<android.support.v4.view.ViewPager
<!-- ViewPager for swipe function in CalendarActivity -->
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="ru.calendar.CalendarActivity"
android:id="@+id/calendarContainer">
<fragment
android:id="@+id/fragment_a"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="#ffffff"
class="ru.calendar.FragmentA" />
<fragment
android:id="@+id/fragment_b"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"
class="ru.calendar.FragmentB" />
<fragment
android:id="@+id/fragment_c"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="match_parent"
class="ru.calendar.FragmentC" />
</android.support.v4.view.ViewPager>
这就是一个fragment.xml的样子:
public class FragmentA extends Fragment {
public FragmentA() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_a, container, false);
}
}
编辑以下是CalendarActivity的一部分......
viewPager = (ViewPager) findViewById(R.id.calendarContainer);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
actionBar.setSelectedNavigationItem(arg0);
// Intent intent = new Intent(this, CalendarActivity.class);
// startActivity(intent);
Log.d("DpoiNT", "onPageSelected at " + " position " + arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// Log.d("DpoiNT", "onPageScrolled at "+" position " +arg0+" from " +arg1+" with number of pixels "+arg2);
}
@Override
public void onPageScrollStateChanged(int arg0) {
if(arg0== ViewPager.SCROLL_STATE_IDLE){
Log.d("DpoiNT", "onPageScrollStateChanged Idle");
}
if(arg0== ViewPager.SCROLL_STATE_DRAGGING){
Log.d("DpoiNT", "onPageScrollStateChanged Dragging");
}
if(arg0== ViewPager.SCROLL_STATE_SETTLING){
Log.d("DpoiNT", "onPageScrollStateChanged Settling");
}
}
});
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int arg0) {
Fragment fragment=null;
if(arg0 == 0) {
fragment = new FragmentA();
}
if(arg0 == 1) {
fragment = new FragmentB();
}
if(arg0 == 2) {
fragment = new FragmentC();
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
}
答案 0 :(得分:0)
您正在使用支持库中的片段。对于他们,您必须使用SupportFragmentManager。你可以通过调用
来获得它getSupportFragmentManager()
而不是
getFragmentManager()
答案 1 :(得分:0)
这不是你用片段查看寻呼机的方法;你需要使用PagerAdapter,并且你没有在xml中定义你的片段,它应该由适配器在代码中动态实例化。
http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html http://developer.android.com/training/animation/screen-slide.html
此部分代码仅用于默认布局和单个片段。
android.app.FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
FragmentA frag = new FragmentA();
fragmentTransaction.replace(android.R.id.content, frag);
fragmentTransaction.commit();
只需按照浏览分页器指南。
或者,如果您希望在同一活动中同时拥有多个片段,并且同时在同一屏幕上,则您不能使用视图寻呼机。您需要一个根视图组,其中包含少量在主xml中具有id的视图组,并使用您在上面获得的代码。
...
fragmentTransaction.replace([ID of the view group you want your fragment to be in], frag);
...
你已经决定了你想要做的事情。