Android:添加一个简单的片段

时间:2014-09-09 12:28:44

标签: java android android-fragments fragment frame

我是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无法转换为   片段)

我已经尝试将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();**
}

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>

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>

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

}

有人可以帮帮我吗?

约翰

1 个答案:

答案 0 :(得分: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