请帮助我! 我在做什么错了?
在Fragment1
中@Override
public static Fragment1 newInstance(String param) {
Fragment1 fragment = new Fragment1();
Bundle args = new Bundle();
args.putString("key","value");
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString("key");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment1, container, false);
textview.setText(mParam1)
return v
在活动中onCreate
Fragment1.newInstance("text");
最后我在mParam1中没有null
为什么?
答案 0 :(得分:0)
我不相信您的mParam1为空。我认为您的textview为null,因为您没有引用它。您需要为其提供对布局中textview的引用。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment1, container, false);
TextView textview = v.findViewById(R.id.textview);
textview.setText(mParam1);
return v;
}
此外,如果希望获得传递给新实例的字符串而不希望为所有textview设置“值”,则需要将args.putString("key", "value")
更改为args.putString("key", param)
。
另外,请确保您import android.support.v4.app.Fragment;
并将其添加到MainActivity的onCreate中:
Fragment fragment = Fragment1.newInstance("Text");
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragmentContainer, fragment, null)
.commit();
其中R.id.fragmentContainer是activity_main.xml中FrameLayout的ID。
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
如果没有,则片段中的onCreate将永远不会被调用,也不会膨胀。我想不出其他任何原因,因为您的片段代码很好。因此问题出在您的主要活动中。
答案 1 :(得分:0)
您必须将args放在父Activity的Fragment中。
例如,如果您使用ViewPager,则在实例化时在适配器中执行以下操作:
public class ParentActivity extends FragmentActivity {
private class MyAdapter extends FragmentStatePagerAdapter {
MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
fragment.setArguments(args);
switch (position) {
case 0:
Fragment1 fragment = new Fragment1();
Bundle args = new Bundle();
args.putString("key", "MyString");
fragment.setArguments(args);
return fragment;
}
}
@Override
public int getCount() {
return 1;
}
}
}