片段捆绑

时间:2018-09-28 16:20:14

标签: java android

请帮助我! 我在做什么错了?

在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

为什么?

2 个答案:

答案 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;
    }
 } 
}