如何将Android片段添加到FragmentActivity中?

时间:2012-11-02 16:32:01

标签: android android-fragments android-support-library

我正在使用兼容包,修订版4将片段添加到我的Gingerbread应用程序中。没有记录任何错误,但片段不再显示在屏幕上(它在我开始清理它并添加方法之前一次就完成了!)。底部片段有望封装我的导航方法,如“goHome”和“goCart”,并放置在所有屏幕上。
我尝试将元素添加到我的布局中,并收到了android.view的可怕的Classnotfound错误。我已经进一步使用这种方法。

我的日志显示已添加片段。这是碎片:

public class BottomFragment extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    View v = inflater.inflate(R.layout.bottom_nav, container, false);
    Log.v("BottomFragment","onCreate after inflate");
    /*
    ImageView find_img = (ImageView)v.findViewById(R.id.bottom_find_image);

    find_img.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.v("BottomFragment.OnClickListener"," with Find clicked");
            findRegistry();
        }
    });
     */
    // Inflate the layout for this fragment
    return v;

上面显示的日志消息。 这是添加片段的活动:

public class StartActivity extends FragmentActivity {

public static Context appContext;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.find_main);

    appContext = getApplicationContext();

    // Create new fragment and transaction
    BottomFragment newFragment = new BottomFragment();

    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add( R.id.frame_bottom_frag, newFragment );
     // Commit the transaction
    transaction.commit();
}

这是Fragment使用的bottom_nav.xml。

<RelativeLayout
    android:id="@+id/bottom_nav"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

<LinearLayout
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <ImageView
            android:layout_height="wrap_content"
            android:layout_width="60dp"
            android:id="@+id/bottom_home_image"
            android:src="@drawable/home"
            android:clickable="true"
            android:onClick="goHome"
            />

    <ImageView
            android:layout_height="wrap_content"
            android:layout_width="60dp"
            android:id="@+id/bottom_shopping_cart_image"
            android:src="@drawable/shopping_cart"
            android:clickable="true"
            android:onClick="goCart"
            />
</LinearLayout>
</RelativeLayout>

这是活动布局find_main:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
     android:layout_height="fill_parent" android:layout_gravity="center">
<TableLayout
    android:id="@+id/main_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >      

<TableRow android:padding="20dip">

    <ImageView
            android:layout_height="60dip"
            android:layout_width="60dip"
            android:id="@+id/home_image"
            android:src="@drawable/create"

            android:clickable="true"
            android:onClick="goHome"
            />

        <TextView
                android:id="@+id/home_text"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="@string/home" android:textAppearance="?android:attr/textAppearanceLarge"
                android:textStyle="bold"
                android:layout_toRightOf="@id/home_image"

                android:clickable="true"
                android:onClick="goCart"/>
</TableRow>
</TableLayout>   
<FrameLayout android:name="com.marcole.gingerbread.grw.BottomFragment"
          android:id="@+id/frame_bottom_frag"
          android:layout_weight="2"
          android:layout_width="0dp"
          android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>

下面是一些日志:

11-02 16:20:57.650: INFO/ActivityManager(61): Start proc com.marcole.gingerbread.grw for     activity com.marcole.gingerbread.grw/.StartActivity: pid=522 uid=10041 gids={3003}
11-02 16:20:57.690: INFO/dalvikvm(513): JNI: AttachCurrentThread (from ???.???)
11-02 16:20:57.690: INFO/AndroidRuntime(513): NOTE: attach of thread 'Binder Thread #3' failed
11-02 16:20:58.090: WARN/ActivityThread(522): Application com.marcole.gingerbread.grw is waiting for the debugger on port 8100...
11-02 16:20:58.100: INFO/System.out(522): Sending WAIT chunk
11-02 16:20:58.110: INFO/dalvikvm(522): Debugger is active
11-02 16:20:58.310: INFO/System.out(522): Debugger has connected
11-02 16:20:58.310: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:58.510: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:58.721: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:58.920: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:59.121: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:59.322: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:59.522: INFO/System.out(522): waiting for debugger to settle...
11-02 16:20:59.721: INFO/System.out(522): debugger has settled (1408)
11-02 16:21:00.771: DEBUG/dalvikvm(522): GC_EXTERNAL_ALLOC freed 59K, 49% free 2757K/5379K, external 2121K/2137K, paused 62ms
11-02 16:21:00.851: VERBOSE/BottomFragment(522): onCreate after inflate
11-02 16:21:01.521: INFO/ActivityManager(61): Displayed com.marcole.gingerbread.grw/.StartActivity: +3s935ms

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我发现了问题。我需要将FrameLayout移动到表格布局中。 从:

</TableLayout>   
    <FrameLayout android:name="com.marcole.gingerbread.grw.BottomFragment"
      android:id="@+id/frame_bottom_frag"
      android:layout_weight="2"
      android:layout_width="0dp"
      android:layout_height="match_parent">
   </FrameLayout>
</LinearLayout>

要:

</TableRow>
    <FrameLayout android:name="com.marcole.gingerbread.grw.BottomFragment"
                 android:id="@+id/frame_bottom_frag"

                 android:layout_width="wrap_content"
                 android:gravity="bottom"
                 android:layout_centerHorizontal="true"
                 android:layout_height="wrap_content">
    </FrameLayout>
</TableLayout>
</LinearLayout>

现在,如果我可以让它一路走到最底层!