Android Can';创建新活动时不要添加片段

Android Can';创建新活动时不要添加片段,android,android-fragments,Android,Android Fragments,我正在尝试创建一个类似于向导的Android应用程序,我想创建一个活动和两个动态片段,第一个片段将在创建活动时添加,第二个片段将在用户单击第一个片段中的按钮时添加,现在我甚至无法将片段添加到活动中: 创建方法时的活动: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_

我正在尝试创建一个类似于向导的Android应用程序,我想创建一个活动和两个动态片段,第一个片段将在创建活动时添加,第二个片段将在用户单击第一个片段中的按钮时添加,现在我甚至无法将片段添加到活动中:

创建方法时的活动:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Fragment fr  = new FragmentNumber();

    getSupportFragmentManager().beginTransaction().add(fr, "number_fragment").commit();


}
这是我的活动代码,当我运行它时,屏幕是空白的

R.layout.activity_main指的是一个空的线性布局,我不想在那里添加片段,因为我需要它们是动态的

提前谢谢

编辑:粘贴更多文件

活动\u main.XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="hello from main"
    />

</FrameLayout>
公共类MainActivity扩展了ActionBarActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if(findViewById(android.R.id.content) != null)
    {
        Log.d("main activity", "content found");
    }

    FragmentNumber fr  = new FragmentNumber();

    //getSupportFragmentManager().beginTransaction().add(android.R.id.content, fr, "number_fragment").commit();
    getSupportFragmentManager().beginTransaction().replace(android.R.id.content, fr).commit();

}
FragmentNumber numberFragment;
FragmentFacebook facebookFragment;
public void facebookClicked(View view)
{
    numberFragment = new FragmentNumber();
    numberFragment.facebookClicked(view);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

现在它正在工作,但片段没有被替换,它显示活动的内容\u main+片段编号片段的内容,甚至id i替换它…

按照以下步骤操作:

  • 创建主(活动布局)文件。在其中,添加一个框架布局,它将充当片段的容器
  • 现在创建两个片段。这涉及到在片段的onCreateView方法中创建两个xml文件
  • 您的一个片段(第一个片段)应该有一个用户可以单击的按钮。这意味着您必须在通过id找到onCreateView方法后,在onCreateView方法内将onClick侦听器附加到它
  • 现在,在第一个片段内创建一个接口,并在其中添加一个方法,在实现该接口后,您的活动应该覆盖该方法
  • 当用户单击该按钮时,在onClick方法内部,您应该调用interface方法来通知click事件的活动
  • 在活动内部,当调用该方法时,创建第二个片段的新实例,并通过替换第一个片段将其添加到视图中——或者这取决于您是否在活动中使用双窗格布局——在这种情况下,您只需添加片段
  • 记住,在将片段添加到视图之前,先检查片段是否存在
  • 我希望这些步骤对你有所帮助

    示例代码

    public class WizardActivity extends Activity implements SecondFragment.OnButtonClickedListener
    {
       private FirstFragment firstFragment;
    
       public void onCreate(Bundle saveInstanceState)
       {
           super.onCreate(saveInstanceState);
    
           setContentView(R.layout.main);
    
           firstFragment = new FirstFragment();
    
           setFragment(firstFragment, "firstFragment");
       }
    
    
       @Override
       public void loadSecondFragment()
       {
           SecondFragment secondFragment = new SecondFragment();
    
           setFragment(secondFragment, "secondFragment");
       }
    
       public void setFragment(Fragment frag, String tag)
       {
           FragmentManager fm = getFragmentManager();
           FragmentTransaction ft = fm.beginTransaction();
    
           Fragment fragment = getFragmentManager().findFragmentById(R.id.fragmentContainer);
           if(fragment == null)
           {
               ft.add(R.id.fragmentContainer, frag, tag);
           } else {
              ft.replace(R.id.fragmentContainer, frag, tag);
           }
    
           ft.addToBackStack(null);
           ft.commit()
    
       }
    
    }
    
    现在是主布局的xml文件

    <LinearLayout ........>
    
        <!--add whatever you need here-->
    
         <FrameLayout 
            android:id="@+id/fragmentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </LinearLayout>
    
    您应该能够创建第二个片段,并在单击按钮时将其加载到活动中


    祝你好运。

    谢谢你的回复,我的问题是我无法将片段添加到活动中,片段a包含文本视图,当我将片段添加到活动中时,片段的onCreate被调用,片段的视图被设置,但它不显示主活动文本视图。请将您的主活动.xml文件与您的问题粘贴在一起。+1对于您刚才编写的代码,它仍然无法用片段内容替换主活动内容,但没有问题我修复了它,如果你有任何链接,可以帮助我的碎片,我会非常感谢你。ThnaksCheck:如果你需要我通过gmail聊天,我愿意进一步帮助你。再次祝你好运当我在FragmentB上时,我不能按back按钮,我添加了getActionBar().setDisplay。。。这是真的,但没有。
    <LinearLayout ........>
    
        <!--add whatever you need here-->
    
         <FrameLayout 
            android:id="@+id/fragmentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </LinearLayout>
    
    public class FirstFragment extends Fragment implements View.OnClickListener
    {
        private Activity mActivity;
    
        @Override
        public void onAttach(Activity act)
        {
            super.onAttach(act);
            this.mActivity = act;
    
            /*Initialize whatever you need here*/
        }
    
        @Override
        public View onCreateView(LayoutInflator inflator, ViewGroup container, Bundle saveInstanceState)
    
        {
            View v = inflator.inflate(R.layout.first_fragment, container, false);
    
            Button button = (Button)v.findViewById(R.id.button);
            button.setOnClickListener(this);
        }
    
    
        @Override
        public void onClick(View v)
        {
            ((OnButtonClickListener), mActivity).loadSecondFragment();
        }
    
        public interface OnButtonClickListener
        {
            void loadSecondFragment();
        }
    }