Android片段未显示

时间:2014-05-26 10:50:56

标签: java android android-fragments

我是Android开发人员的新手,我跟随官方的Android"开始使用"。

事实是,我的片段没有显示在主要活动上(几天前它运作良好,但我改变了一些行,我不记得哪些行)。我认为这是一个非常基本的问题,因为我没有使用复杂的片段:它基本上是活动中的一个片段。

这是我的活动:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container1"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mysecond.MainActivity"
tools:ignore="MergeRootFrame" />

我的片段:

<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

这个活动的java代码(我在应用程序中有一些其他的活动,基于相同的模式&#34;一个活动中的一个片段&#34;它们运作良好......)

public class MainActivity extends ActionBarActivity {

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

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container1, new PlaceholderFragment()).commit();
        }
    }

/**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);

            return rootView;
        }
    }
}

有什么想法吗? 谢谢:))

[编辑] 所以这是我的新onCreate方法:

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

    getSupportFragmentManager().beginTransaction().replace(
            R.id.container1, new PlaceholderFragment()).commit();

}

仍然没有为此活动工作(如果我在activity_main.xml中添加一个按钮,我将能够看到它但我无法在片段中看到TextView ...)< / p>

logcat没有错误,是的,启动了活动(我在onCreate和onCreateView中添加了一些Log.e,我看到了它们)

3 个答案:

答案 0 :(得分:1)

onCreate方法中,您不必检查savedInstanceState是否为null,而是您使用的FrameLayout的内容是null } 或者您只是总是用新的片段替换片段并省略任何检查。

答案 1 :(得分:0)

您可以使用add而不是replace

你可以像下面显示的代码那样做:

getSupportFragmentManager().beginTransaction().replace(
                    R.id.container1, new PlaceholderFragment());

答案 2 :(得分:0)

对我来说这项工作。使用init()方法实现接口FragmentActions并使用此

    private void showFragment(String fragmentTag){



    FragmentTransaction trasaction = getSupportFragmentManager().beginTransaction();

    FragmentActions fragment =  (FragmentActions) getSupportFragmentManager().findFragmentByTag(fragmentTag);


    if(fragment==null ){  



        if(lastFragmentviewed!=null)
           trasaction.hide(lastFragmentviewed);

        fragment = (FragmentActions) newInstance(fragmentTag);  

        trasaction.add(R.id.content_frame,(Fragment) fragment,fragmentTag);  

    }else{



        if(lastFragmentviewed!=null && !lastFragmentviewed.equals(fragment))
           trasaction.hide(lastFragmentviewed);

        if(getSupportFragmentManager().findFragmentByTag(fragmentTag)!=null){
            fragment.init();
            trasaction.show((Fragment) fragment);
        }else
            trasaction.add(R.id.content_frame,(Fragment) fragment,fragmentTag);

     }

    lastFragmentviewed=(Fragment) fragment;

    trasaction.commit();



}