【问题标题】:The Fragment activity not attaching to main片段活动不附加到主
【发布时间】:2014-07-02 10:29:18
【问题描述】:

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

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

主要活动 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>

我的 main.java 文件

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

我的 fragment.java 文件

 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>

【问题讨论】:

    标签: java android layout android-fragments layout-inflater


    【解决方案1】:

    ActivityonCreate()

    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;
    

    而且我不确定 Horizo​​nalScrollView 是否真的有资格作为容器,我认为您需要将 FrameLayout 嵌入其中并将其用作 FragmentContainer。

    【讨论】:

    • 先生,应该是返回视图吗?或返回表格布局; ?
    • 我相信你在顶部夸大的视图。
    • 非常感谢先生。你帮我解决了一个我工作了 10 个小时的问题。先生,供您参考,horizo​​ntalscrollview 作为容器工作
    • 谢谢,我不确定:)
    【解决方案2】:

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

    要解决此问题,只需 return view; 而不是您当前的 return 语句。

    此外,当您创建的Fragment 可能没有高度和宽度时,您还使用wrap_content 作为主要Activity 布局元素的高度和宽度。因此,您可能永远看不到任何东西。我建议您使用 match_parent 代替您的主要活动中的两个元素。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-24
      • 2018-01-05
      • 2021-09-02
      • 2014-04-13
      • 2012-12-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多