如何从活动中发送数据并在Fragment中获取它

时间:2016-09-28 22:15:27

标签: android android-fragments

嗨,大家好我是从Android世界开始的,正如问题所示,我已经陷入了困境。我做了一些研究,并尝试了在这个社区发布的一些答案,但我无法弄明白。

我有一个显示联系人列表的活动,列表中的每个项目都会在点击后导航到详细信息视图。我的目标是通过de item id来执行请求并显示响应。

这是我的尝试:

public class PersonDetailActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();

        // This variables have the right value
        String personName = intent.getStringExtra("personName");
        String personID = intent.getStringExtra("personID");

        Bundle bundle = new Bundle();
        // I'm trying to send this variable to make a request later
        bundle.putString("personID", personID);
        // Set Fragment Arguments
        PersonDetailFragment fragment = new PersonDetailFragment();
        fragment.setArguments(bundle);

        setContentView(R.layout.persons);
    }
}

public class PersonDetailFragment extends Fragment {


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


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

        // This throw me a NPE
        String data = null;
        if (getArguments() != null) {
            data = getArguments().getString("personID");
        }
        final View rootView = inflater.inflate(R.layout.person_detail_list, container, false);
        return rootView;
    }

}

先谢谢你们

3 个答案:

答案 0 :(得分:2)

尝试为您的项目设置监听器:

public void onItemClick(ItemView itemView) { 
     personId = itemView.getPersonId(); 
     Fragment detailFragment = PersonDetailFragment.newInstance(personId); 
     getSupportFragmentManager()
               .beginTransaction()
               .replace(your_fragment_container, detailFragment)
               .commit();
}

下一步是片段初始化。使用静态方法创建片段是一种很好的做法。将此方法写入适当的片段类:

public static PersonDetailFragment newInstance(String personId) {
     Bundle args = new Bundle();
     args.putString("personId", personId);
     PersonDetailFragment fragment = new PersonDetailFragment();
     fragment.setArguments(args);
     return fragment;
}

答案 1 :(得分:0)

如果您在创建Fragment实例后不需要传递任何变量,请在构造函数中传递参数,如下所示。

PersonDetailFragment fragment = new PersonDetailFragment(personID);

像这样成为Fragment的构造函数:

public PersonDetailFragment(String personID) {
        // Required empty public constructor
    }

如果您想与活动不断沟通,您可以实现接口。阅读这篇文章,从listeners开始,这是一个很好的观点。

https://developer.android.com/training/basics/fragments/communicating.html

答案 2 :(得分:0)

您似乎没有将片段添加到您的活动中?

如果您的片段位于活动的布局xml中,那么它与您正在创建的片段和在Java中添加参数的片段不同。

您需要以编程方式将片段添加到活动中。