创建新活动时无法添加片段

Redaa

我正在尝试创建一个向导,就像Android应用程序一样,我想创建一个活动和两个动态片段,第一个片段将在创建Activity时添加,第二个片段将在用户单击第一个片段中的按钮时添加,现在我什至不能将Fragment添加到活动中:

活动onCreate方法:

@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引用一个空的线性布局,我不想在其中添加片段,因为我需要它们是动态的。

提前致谢。

编辑:粘贴更多文件

activity_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>

MaicActivity.java

package com.example.fragmenttraining;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

公共类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);
}

}

现在它可以工作了,但是片段没有被替换,它显示了activity_main的内容+ FragmentNumber片段的内容,即使我替换了它...

令人信服的

跟着这些步骤:

  1. 创建您的主(活动布局)文件。在其中添加一个框架布局,该布局将充当片段的容器。
  2. 现在创建您的两个片段。这涉及到创建两个XML文件,这些文件将在片段的onCreateView方法中放大
  3. 您的一个片段(第一个片段)应具有一个用户可以单击的按钮。这意味着您必须在通过ID查找onClick侦听器之后将其附加到onCreateView方法内。
  4. 现在,在第一个片段中创建一个接口,并在其中添加一个方法,实现该接口后,您的活动应覆盖该方法。
  5. 当用户在onClick方法内单击该按钮时,应调用接口方法以通知click事件的活动。
  6. 在活动内部,调用该方法时,创建第二个片段的新实例,并通过替换第一个片段将其添加到视图中-或取决于您是否在活动中使用两窗格布局-在这种情况下,您需要只需添加片段。
  7. 请记住先检查片段是否存在,然后再简单地添加一个即可查看。

希望这些步骤对您有所帮助。

样例代码

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>

现在,让我们创建您的一个片段-第一个片段:

FirstFragment.java

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

您应该能够创建第二个片段,并在单击按钮时将其加载到活动中。

祝你好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章