【问题标题】:Passing an int from an activity to a fragment将 int 从活动传递到片段
【发布时间】:2014-12-08 15:07:05
【问题描述】:

我在我的活动中使用以下代码:

公共类 SongSing 扩展 Activity 实现 SongCommunicator{

int lang, level;
static SongFragment2 fragment2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    Bundle extras = getIntent().getExtras();
    lang = extras.getInt("lang");
    level = extras.getInt("level");

    Bundle b = new Bundle();
    b.putInt("lang", lang);
    Fragment f = new Fragment();
    f.setArguments(b);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_song_sing);

}

还有我的片段:

公共类 SongFragment1 扩展 Fragment 实现 AdapterView.OnItemClickListener{

int lang, level;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.song_fragment1, null);

}

@Override
public void onActivityCreated(Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);

    Bundle bundle = this.getArguments();
    if(bundle != null){
        lang = bundle.getInt("lang");
    }

但我得到一个空包。

知道为什么吗?

谢谢!

【问题讨论】:

  • Fragment f = new Fragment(); 你为什么要实例化一个通用片段?你有自己的SongFragment1,用它来代替。
  • 你创建了一个片段实例,你添加了参数,但是你停止了。您现在应该将此信息传递给您的片段(事务)。
  • 啊...我是 Fragment 的新手。我有一首歌
  • 点击了错误的按钮.. 我有一个 song_sing.xml 可以实例化我的片段。您将如何简单地传递来自活动的数据。

标签: android android-fragments


【解决方案1】:

创建片段的常见模式如下所示:

/**
 * Use this factory method to create a new instance of
 * this fragment using the provided parameters.
 *
 * @param broadcast to watch
 * @return A new instance of fragment LivePlayerFragment.
 */
public static LivePlayerFragment newInstance(Broadcast broadcast) {
    LivePlayerFragment fragment = new LivePlayerFragment();
    Bundle args = new Bundle();
    args.putParcelable(PARAM_BROADCAST, broadcast);
    fragment.setArguments(args);
    return fragment;
}

public LivePlayerFragment() {
    // Required empty public constructor
}

如您所见,您有一个静态方法来构建带有适当参数的片段。注意空的构造函数。这对于 Fragments 是强制性的,让系统在必要时调用它

在此之后,您可以在 onCreateView 或 OnCreate 方法中获取所需的参数...

【讨论】:

    【解决方案2】:

    感谢所有提供的意见! 我通过在片段端调用方法找到了一个干净的解决方案。简单愚蠢的伟大。 我建议阅读以下文章:

    https://github.com/codepath/android_guides/wiki/Creating-and-Using-Fragments

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多