我知道这个问题已被多次询问,但我似乎无法找到问题的答案。
我试过这篇文章的解决方案: How to go to fragment from activity如下所示:
您需要创建一个扩展FragmentActivity并启动的类 你的片段
public class MessagesFragmentActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, new MessagesFragment ()).commit();}
}
}
你的片段构造函数。
public YourFragment() {
}
然后从你调用活动,开始你的片段活动 正常的方式
Intent i = new Intent(YourActivity.this,MessagesFragment.class);
startActivity(i);
但它对我不起作用,因为我的活动扩展了AppCompatActivity,因此我无法扩展FragmentActivity。
在这种情况下,我尝试创建一个新的活动,扩展FragmentActivity并将意图链接到这个新活动,然后这个新活动将转移到该片段。
以下是我的代码:
在我的活动中:
saveBTN.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (listName.getText().toString().equals("")) {
listName.requestFocus();
listName.setError("Required field");
} else {
if (listOwner.getText().toString().equals("")) {
listOwner.requestFocus();
listOwner.setError("Required field");
} else {
params.add(new BasicNameValuePair("userID", userid));
params.add(new BasicNameValuePair("Name", listName
.getText().toString()));
params.add(new BasicNameValuePair("OwnerName",
listOwner.getText().toString()));
params.add(new BasicNameValuePair("CompanyName",
companyName.getText().toString()));
params.add(new BasicNameValuePair("CompanyAddress",
companyAddress.getText().toString()));
params.add(new BasicNameValuePair("CompanyPhone",
companyNumber.getText().toString()));
for (int d = 0; d < CustomFieldsList.size(); d++) {
CustomFields field = CustomFieldsList.get(d);
CheckBox cb = (CheckBox) findViewById(field
.getFieldID());
if (cb.isChecked()) {
checkboxChecked.add(Integer.toString(field
.getFieldID()));
}
}
new SaveContact().execute();
Intent back = new Intent(AddContactListActivityOCR.this, Revert.class);
startActivity(back);
finish();
}
在我的新活动(Revert.java)中:
public class Revert extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null){
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, new FragmentContactLists()).commit();}
}
}
出了什么问题?
------------------------------------- EDIT ------ --------------------------------
尝试@saeed回答后:
虽然我导入了“android.support.v4.app.Fragment;”,但它仍然显示此错误。
答案 0 :(得分:0)
试试这个: 在你的碎片上:
public static MyFragment createFragment() {
MyFragment fragment = new MyFragment();
return fragment;
}
关于您的活动:
mFragment = MyFragment.createFragment();
getSupportFragmentManager().beginTransaction().add(
R.id.fragment_container,
mFragment).commit();
答案 1 :(得分:0)
试试这个。这对我有用。
并确保您有导入V4片段。 使用替换而不是添加。
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_content_id, new SubscriptionFragment(), "")
.addToBackStack(null).commit();
答案 2 :(得分:0)
你的活动xml中你应该有一个framelayout你想要使用片段,id是framelayout到@ + id / content ..并且替换&#34; android.R.id.content&#34;在您的代码中R.id.content。 这应该可以解决问题。
答案 3 :(得分:0)
您请替换此代码
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, new new FragmentContactLists()).commit();
到
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new new FragmentContactLists()).commit();
你可以像这样替换actyity布局
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/container">
</FrameLayout>
在FragmentContactList中导入android.app.Fragment。将其更改为导入android.support.v4.app.Fragment;
答案 4 :(得分:0)
Fragment mRideHistory = new fragmentAny();
getFragmentManager().beginTransaction().replace(R.id.content_frame, mRideHistory)
.addToBackStack(getPackageName()).commit();
这是片段活动的正确格式。 在需要添加此项的任何地方使用getActivity。 我希望这些信息对您有所帮助。