Fragment活动没有附加到main



我是第一次尝试片段。我已经阅读了所有的开发人员文档,但我仍然无法弄清楚为什么我的片段不附加到主要活动。下面是我的代码

我只得到我的主要活动的布局。无片段布局

主活动xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relative_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context="com.attendancerecord.HomePage"
tools:ignore="MergeRootFrame">
    <HorizontalScrollView
        android:id="@+id/scroll2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="200dp">
    </HorizontalScrollView>
</RelativeLayout>

my main.java file

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page);
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    HomePage_Fragment myfragment = new HomePage_Fragment();
    ft.add(R.id.scroll2, myfragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
    }

my fragment.java file

 public class HomePage_Fragment extends Fragment {
     @Override
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SQLiteDatabase db = getActivity().openOrCreateDatabase("DATABASE",android.content.Context.MODE_PRIVATE ,null);
        db.execSQL("CREATE TABLE IF NOT EXISTS ATTENDANCE_RECORD(NAME VARCHAR, ATTENDED integer, " +
                "TOTAL integer, BUNKS integer, PERCENTAGE float)");
       for(int i=0;i<num_subjects;i++){           //initializing of num_subjects is done (long code)
       db.execSQL("INSERT INTO ATTENDANCE_RECORD VALUES( '"+name_subjects[i]+"', "+0+","+0+", "+0+", "+0.0+" )");
         }
      }

public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstance){
    View view= inflater.inflate(R.layout.fragment_home_page,null);
    TableLayout tableLayout = (TableLayout)view.findViewById(R.id.record);
    TableRow tableRow;
    TextView textView;
    SQLiteDatabase db = getActivity().openOrCreateDatabase("DATABASE",android.content.Context.MODE_PRIVATE ,null);
    Cursor c=db.rawQuery("SELECT * FROM ATTENDANCE_RECORD", null);
    c.moveToFirst();
    for(int i=0;i<num_subjects;i++){
        tableRow = new TableRow(getActivity());
        for(int j=0;j<5;j++){
            textView = new TextView(getActivity());
            switch(j){
            case 0: textView.setText(c.getString(c.getColumnIndex("NAME")));
                    break;
            case 1: textView.setText(String.valueOf(c.getString(c.getColumnIndex("ATTENDED"))));
                    break;
            case 2: textView.setText(String.valueOf(c.getInt(c.getColumnIndex("TOTAL"))));
                    break;
            case 3: textView.setText(String.valueOf(c.getInt(c.getColumnIndex("BUNKS"))));
                    break;
            case 4: textView.setText(String.valueOf(c.getFloat(c.getColumnIndex("PERCENTAGE"))));
                    break;
            }
            textView.setPadding(15, 25, 15, 25);
            tableRow.addView(textView, new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, 
                            TableRow.LayoutParams.WRAP_CONTENT, 0));
        }
        c.moveToNext();
        tableLayout.addView(tableRow);
    }
    c.close();

    return inflater.inflate(R.layout.fragment_home_page,container,false);

}

}

我fragment_home_page.xml

 <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:context="com.attendancerecord.HomePage$PlaceholderFragment" >

  <TableLayout
    android:id="@+id/record"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true">
  </TableLayout>

</RelativeLayout>

Activity onCreate()中,

if(saveInstanceState == null)
{
    FragmentManager fm = getSupportFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    HomePage_Fragment myfragment = new HomePage_Fragment();
    ft.add(R.id.scroll2, myfragment);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();
}

片段onCreateView()

    View view = inflater.inflate(R.layout.fragment_home_page, container, false);

onCreateView()的最后一行当前不正确,请使用

    return view;

我不确定如果HorizonalScrollView实际上是合格的容器,我认为你需要嵌入一个框架布局到它,并使用它作为FragmentContainer。

我发现的一个问题是,您正在从onCreateView()方法返回一个新膨胀的View,而不是您之前已经创建并一直在使用的View

要解决这个问题,只需return view;代替当前的返回语句。

同样,当你正在创建的Fragment可能没有高度和宽度时,你也使用wrap_content作为主要Activity布局元素的高度和宽度。这样的话,你可能什么也看不到。我建议在你的主要活动中使用match_parent来代替这两个元素。

最新更新