我是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);
}
}
有人可以帮帮我吗?
约翰
答案 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
。