Android:添加一个简单的片段

JRs*_*Rsz 7 java android frame fragment android-fragments

我是Android应用程序的新手,所以我希望我能在这里找到一些帮助.我已经在这里搜索了我的问题并找到了一些东西,但这不起作用.

我想将一个片段添加到FrameLayout但它不起作用.我的目标是创建一个始终存在的框架(/ Framework?),用户可以与它进行交互,并在特定的"窗口"框架内部我要显示页面/片段,总共五个,并且能够切换任何时候的页面/片段,所以我有一个始终存在的框架,并在这个动态变化的页面内.但是现在我被困在一开始就向这个Frame添加了一个简单的片段(已经开始工作了.)

这是我希望的所有相关代码:错误发生在MainActivity.java(getSupportFragmentManager().beginTransaction().add(R.id.mainFrame,homeFragment).commit();),它告诉我:

错误:(25,55)错误:没有为add(int,HomeFragment)方法找到合适的方法FragmentTransaction.add(Fragment,String)不适用(参数不匹配; int不能转换为Fragment)方法FragmentTransaction.add(int, Fragment)不适用(参数不匹配; HomeFragment无法转换为Fragment)

我已经尝试将homeFragment转换为Fragment,但这不起作用.

MainActivity.java

import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;


public class MainActivity extends FragmentActivity
{
    FragmentTransaction fragmentTransaction;
    HomeFragment homeFragment;

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

        homeFragment = new HomeFragment();
        **getSupportFragmentManager().beginTransaction().add(R.id.mainFrame, homeFragment).commit();**
}
Run Code Online (Sandbox Code Playgroud)

activity_main.xml中

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

    <FrameLayout
        android:id = "@+id/mainFrame"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:layout_marginBottom = "@dimen/bottom_Main_Tabs">
        </FrameLayout>

    [...]

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

fragment_home.xml

<FrameLayout 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"
    tools:context="com.example.HomeFragment"> // it is not really com.example...

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>
Run Code Online (Sandbox Code Playgroud)

HomeFragment.java(一切都已自动生成,但我已经删除了一些东西)

public class HomeFragment extends Fragment
{
    private OnFragmentInteractionListener mListener;


    public static HomeFragment newInstance()
    {
        HomeFragment fragment = new HomeFragment();
        return fragment; // not really neccessary, because it Have shortened it
    }

    public HomeFragment()
    {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri)
    {
        if (mListener != null)
        {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Activity activity)
    {
        super.onAttach(activity);
        try
        {
            mListener = (OnFragmentInteractionListener) activity;
        }
        catch (ClassCastException e)
        {
            throw new ClassCastException(activity.toString()
                    + " must implement OnFragmentInteractionListener");
        }
    }

    @Override
    public void onDetach()
    {
        super.onDetach();
        mListener = null;
    }

    public interface OnFragmentInteractionListener
    {
        // TODO: Update argument type and name
        public void onFragmentInteraction(Uri uri);
    }

}
Run Code Online (Sandbox Code Playgroud)

有人能帮帮我吗?

约翰

2De*_*Dee 19

您正在混合支持库中的类和仅适用于较新版本操作系统的新类.

例如,您导入android.app.FragmentTransaction(可用于API 11+)但调用getSupportFragmentManager().beginTransaction()返回android.support.v4.app.FragmentTransaction...

您需要导入android.support.v4.app.FragmentTransaction并确保HomeFragment扩展android.support.v4.app.Fragment而不是扩展 android.app.Fragment.