android片段替换为第二个片段不起作用

时间:2016-12-20 03:28:43

标签: android

我的情况是我有一个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;
    }
}

1 个答案:

答案 0 :(得分:1)

实际上使用new运算符获取实例并使用newInstance()静态方法是相同的。

问题在于您的代码:

public static StartPage newInstance() {
    return new StartPage();
}

您在片段StartPage和Register中使用相同的方法。

因此,您应该像这样更改Register片段的newInstance方法

public static Register newInstance() {
    return new Register();
}