Android片段实例化器在onCreateView

时间:2016-12-13 13:00:11

标签: android class

我要做的是使用参数实例化一个新片段,以设置我的MainActivity类中onCreateView内使用的值。

片段类

//package
//imports

public class LansFragment extends Fragment {

    private static final String ARG_TEXT = "arg_text";

    public LansFragment() {
        super();
    }

    public static LansFragment newInstance(String lan) {

        LansFragment fragment = new LansFragment();
        Bundle args = new Bundle();
        args.putString(ARG_TEXT, lan);
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_lans, container, false);
        Bundle args = getArguments();

        if (args != null) {
            String lan = args.getString(ARG_TEXT);
            //do things using params
        } else {
            //blank params 
            //should have been set when instantiated from MainActivity?
        }

        return view;
    }
}

MainActivity Class

//package
//imports

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         String data = "Some string";
         LansFragment testfragment = LansFragment.newInstance(data);
    }

问题

目前有两个问题。第一个问题是如果我删除: LansFragment testfragment = LansFragment.newInstance(data);然后这个片段仍然运行,这是因为片段是在activity_main.xml内声明的吗?

其次,更重要的问题 - 当我实例化类并传入参数时,就像我在示例中所做的那样,它们在onViewCreate内永远不可用,而是始终显示为null,这是什么原因造成的这会发生吗?

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="app.stats.MainActivity"
    android:orientation="horizontal">

    <fragment xmlns:android=
        "http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/lans_fragment"
        android:name="app.stats.LansFragment"
        tools:layout="@layout/fragment_lans"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

1 个答案:

答案 0 :(得分:2)

<form id="loginform" name="loginform" method="post" action="login.html"> 中添加片段时,使用默认构造函数创建片段。

xml会创建一个新片段,但它不会添加到您的布局中,也不会影响xml中定义的片段。

如果要创建包含其他参数的片段,则必须使用LansFragment testfragment = LansFragment.newInstance(data);添加它,如:

FragmentManager

getFragmentManager().beginTransaction() .replace(R.layout.fragment_layout, testfragment).commit(); 是xml中的容器布局,通常是FrameLayout,在您的情况下,只需将R.layout.fragment_layout替换为:

<fragment ...

请注意,如果您的片段扩展为 <FrameLayout android:id="@+id/fragment_layout " android:layout_width="match_parent" android:layout_height="match_parent"/> ,则应将android.support.v4.app.Fragment替换为getFragmentManager()