Android 连接到活动的多个片段存在问题

Android 连接到活动的多个片段存在问题,android,android-activity,android-fragments,android-studio,Android,Android Activity,Android Fragments,Android Studio,回答:很好,这里的大师告诉我,我走错了路。我发现了一个类似的问题,救了我的命,花了我大约10分钟才把我的屎收集起来给你: 问题: 我知道这里已经有一些关于fragmenst的问题,但我在那里没有找到答案 我正在尝试将三个片段连接到CalendarActivity。我认为最好用代码来解释 我得到的错误是: 我已经尝试了许多不同的导入,但我无法想象如何实现这一点,因此希望得到一些帮助。 如果我在创建FragmentManager/fragmentTransaction时删除android.app,我

回答:很好,这里的大师告诉我,我走错了路。我发现了一个类似的问题,救了我的命,花了我大约10分钟才把我的屎收集起来给你:

问题:

我知道这里已经有一些关于fragmenst的问题,但我在那里没有找到答案

我正在尝试将三个片段连接到CalendarActivity。我认为最好用代码来解释

我得到的错误是: 我已经尝试了许多不同的导入,但我无法想象如何实现这一点,因此希望得到一些帮助。 如果我在创建FragmentManager/fragmentTransaction时删除android.app,我会得到:

这是我的城市

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\u calendar)的xml:

编辑这是下面日历活动的一部分

    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;
    }
}

您正在使用支持库中的片段。对于他们,您必须使用SupportFragmentManager。你打电话就知道了

getSupportFragmentManager() 
而不是

getFragmentManager()

这不是使用片段查看寻呼机的方式;您需要使用PagerAdapter,并且您不需要在xml中定义片段,它应该由适配器在代码中动态实例化

这部分代码仅用于默认布局和单个片段

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);
...

您已经决定了首先要做什么。

这不是您使用fragment查看寻呼机的方式。是的,您是对的,先生,我确实在CalendarActivity中使用它。你有没有其他的想法,比如我用的对吗?你用的是什么?查看寻呼机?还是在同一页上同时出现多个片段?对于viewpager,它为您提供了viewpager的99%实现;android.app.FragmentTransaction FragmentTransaction=getFragmentManager().beginTransaction();FragmentA fragment=新的FragmentA();fragmentTransaction.replace(android.R.id.content,frag);fragmentTransaction.commit();对吗?显示你的MyAdapter。我确实使用ViewPager,因为我想在片段之间滑动。我在“编辑”下添加了一些代码来显示我的想法..你去掉了这个吗:android.app.FragmentManager FragmentManager=getFragmentManager();android.app.FragmentTransaction FragmentTransaction=getFragmentManager().beginTransaction();FragmentA fragment=新的FragmentA();fragmentTransaction.replace(android.R.id.content,frag);fragmentTransaction.commit();这段代码与viewpager无关。是的,也许你是对的,我确实在某个时候使用过getSupportFragment(),我在我的调试过程中对它进行了更改。下面是我在这方面获得支持时遇到的错误
android.app.FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
FragmentA frag = new FragmentA();
fragmentTransaction.replace(android.R.id.content, frag);

fragmentTransaction.commit();
...
fragmentTransaction.replace([ID of the view group you want your fragment to be in], frag);
...