我要做的是使用参数实例化一个新片段,以设置我的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>
答案 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()