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