我已将fragments
类定义为
import android.support.v4.app.Fragment;
public class UserAccountDetailsFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.user_account_details_fragment, container, false);
}}
我已将我的活动定义为
import android.support.v4.app.FragmentActivity;
public class HomeScreenActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);
UserAccountDetailsFragment userAccDetailsFrag = new UserAccountDetailsFragment();
android.app.FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragments, userAccDetailsFrag );
fragmentTransaction.commit();
}
问题是我无法添加片段。它说UserAccountDetailsFragment应该成为一个片段。但该类已经扩展了片段。我在这里错过了什么?
XML--
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".HomeScreenActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<fragment
android:id="@+id/fragments"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
/>
您正在使用support.v4包
你应该试试下面的:
FragmentManager manager=getSupportFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
您根本无法将常规SDK中的Fragment API与android-support SDK混合使用。
您必须调用getSupportFragmentManager()
而不是getFragmentManager()
。
getSupportFragmentManager()
返回android.support.v4.app.FragmentManager.
我还建议首先检查你的片段是否已经添加,如果你的片段没有添加到后堆栈,请在你的片段上使用setRetainInstance(true(。
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
public class HomeScreenActivity extends FragmentActivity {
private static final String FRAGMENT_TAG = "custom_tag";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);
Fragment frag = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
if (frag == null) {
UserAccountDetailsFragment userAccDetailsFrag = new UserAccountDetailsFragment();
userAccDetailsFrag.setRetainInstance(true);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragments, userAccDetailsFrag, FRAGMENT_TAG);
fragmentTransaction.commit();
}
}
试试这个,
import android.support.v4.app.FragmentActivity;
public class HomeScreenActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);
UserAccountDetailsFragment userAccDetailsFrag = new UserAccountDetailsFragment();
android.support.v4.app.FragmentManager fragmentManager = getFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragments, userAccDetailsFrag );
fragmentTransaction.commit();
}
这可能有助于
这就是问题所在:
android.app.FragmentManager FragmentManager=getFragmentManager((;android.app.FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction((;
替换为:
android.support.v4.app.FragmentManager FragmentManager=getFragmentManager((;android.support.v4.app.FragmentTransaction FragmentTransaction=fragmentManager.beginTransaction((;
并在您的xml:中使用它
<fragment
android:id="@+id/map_relative_fragment"
android:layout_width="wrap_content"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment" />
并在清单中提到:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
和映射键
UserAccountDetailsFragment userAccDetailsFrag = new UserAccountDetailsFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.fragments, userAccDetailsFrag).commit();
试试这个