我的情况是我有一个Activity(只有FrameLayout),一个片段有一个butoon,它的功能正在改变为第二个fragmnet,但是当我设置replace和commit时。它失败了。 我尝试了这个功能成功,但它现在没有用。 有谁能告诉我这个问题?将不胜感激。
第一个片段代码:
public class StartPage extends Fragment implements View.OnClickListener {
}
public static StartPage newInstance() {
return new StartPage();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.start_page_fragment, container, false);
//findViews();
imageRegistered = (ImageView) view.findViewById(R.id.imageRegistered);
imageRegistered.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragment=getFragmentManager();
FragmentTransaction transaction=fragment.beginTransaction();
transaction.replace(R.id.frameStartPage,Register.newInstance(),null);
transaction.commit();
Toast.makeText(getActivity(),"Test",Toast.LENGTH_SHORT).show();
}
});
return view;
}
这是我在活动上的frameLayout:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameStartPage"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.huaweb_system.taiwanuniversityhome.MainActivity">
</FrameLayout>
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
if (savedInstanceState == null) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.frameStartPage, StartPage.newInstance());
transaction.commit();
}
}
}
第二个片段:
public class Register extends Fragment implements View.OnClickListener {
public static StartPage newInstance() {
return new StartPage();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.register_activity, container, false);
findViews();
return view;
}
}
答案 0 :(得分:1)
实际上使用new运算符获取实例并使用newInstance()静态方法是相同的。
问题在于您的代码:
public static StartPage newInstance() {
return new StartPage();
}
您在片段StartPage和Register中使用相同的方法。
因此,您应该像这样更改Register片段的newInstance方法
public static Register newInstance() {
return new Register();
}