Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在片段之间传递数据_Android_Android Fragments_Fragment_Android Recyclerview - Fatal编程技术网

Android 在片段之间传递数据

Android 在片段之间传递数据,android,android-fragments,fragment,android-recyclerview,Android,Android Fragments,Fragment,Android Recyclerview,我有一个主要活动和两个片段。在FragmentA中,我有一个回收者的观点。如果我点击“添加”按钮,碎片B是打开的。我想做的事情是将文本写入一些EditText并将数据发送回FragmentA(并在recycler视图中呈现该数据)。你能给我提些建议吗?谢谢 碎片B public class NewContactFragment extends Fragment { EditText name, number, email; public String mName; pu

我有一个主要活动和两个片段。在FragmentA中,我有一个回收者的观点。如果我点击“添加”按钮,碎片B是打开的。我想做的事情是将文本写入一些EditText并将数据发送回FragmentA(并在recycler视图中呈现该数据)。你能给我提些建议吗?谢谢

碎片B

public class NewContactFragment extends Fragment {

    EditText name, number, email;
    public String mName;
    public String mNumber;
    public String mEmail;
    boolean isFavourite = false;

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

    public static NewContactFragment newInstance() {
        NewContactFragment fragment = new NewContactFragment();
        Bundle bundle = new Bundle();
        fragment.setArguments(bundle);

        return fragment;

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ButterKnife.bind(this, view);

        //set title
        ((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.new_contact);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_new_contact, container, false);

        name = (EditText) view.findViewById(R.id.ed_name);
        number = (EditText) view.findViewById(R.id.ed_number);
        email = (EditText) view.findViewById(R.id.ed_email);

        mName = name.getText().toString();
        mNumber = number.getText().toString();
        mEmail = email.getText().toString();

        return view;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.new_contact_menu, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_done:
                //TODO: save editTexts and return to ContactListFragment

                break;
            case R.id.action_favourite:
                getActivity().invalidateOptionsMenu();
                //Toast.makeText(getContext(), "isFavourite is: " + isFavourite, Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
碎片

public class ContactListFragment extends Fragment implements View.OnClickListener {

    private static final String TAG = "newcontact";
    FloatingActionButton fabButton;
    SearchView searchView;
    RecyclerView recyclerView;
    ContactsAdapter contactsAdapter;
    List<Contact> mContact = new ArrayList<>();

    public static ContactListFragment newInstance() {
        Bundle args = new Bundle();
        ContactListFragment fragment = new ContactListFragment();
        fragment.setArguments(args);
        return fragment;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_contact_list, container, false);

        searchView = (SearchView) view.findViewById(R.id.search_view);
        fabButton = (FloatingActionButton) view.findViewById(R.id.fab_button);
        fabButton.setOnClickListener(this);

        recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        mContact = SugarRecord.listAll(Contact.class);
        contactsAdapter = new ContactsAdapter(getActivity(), mContact);
        recyclerView.setAdapter(contactsAdapter);

        inputFilter();

        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        ButterKnife.bind(this, view);

        //show actionBar
        ((MainActivity) getActivity()).getSupportActionBar().show();
        //show title
        ((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.app_name);
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    public void inputFilter() {
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                contactsAdapter.filterList(newText);
                return true;
            }
        });
    }

    @Override
    //Fab button listener
    public void onClick(View v) {
        ((MainActivity) getActivity()).showFragment(new NewContactFragment(), TAG);
    }
公共类ContactListFragment扩展片段实现View.OnClickListener{
私有静态最终字符串TAG=“newcontact”;
浮动操作按钮;
搜索视图搜索视图;
回收视图回收视图;
接触式接受器接触式接受器;
List mContact=new ArrayList();
公共静态ContactListFragment newInstance(){
Bundle args=新Bundle();
ContactListFragment=新ContactListFragment();
fragment.setArguments(args);
返回片段;
}
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置选项菜单(真);
}
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u contact\u list,container,false);
searchView=(searchView)view.findviewbyd(R.id.search\u视图);
fabButton=(FloatingActionButton)view.findViewById(R.id.fab_按钮);
fabButton.setOnClickListener(此);
recyclerView=(recyclerView)视图.findViewById(R.id.recycler\u视图);
setLayoutManager(新的LinearLayoutManager(getContext());
mContact=SugarRecord.listAll(Contact.class);
contactsAdapter=新的contactsAdapter(getActivity(),mContact);
recyclerView.setAdapter(contactsAdapter);
inputFilter();
返回视图;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
ButterKnife.bind(这个,视图);
//显示操作栏
((MainActivity)getActivity()).getSupportActionBar().show();
//显示标题
((MainActivity)getActivity()).getSupportActionBar().setTitle(R.string.app_name);
}
@凌驾
SaveInstanceState上的公共无效(束超出状态){
super.onSaveInstanceState(超出状态);
}
public void inputFilter(){
searchView.setOnQueryTextListener(新的searchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串查询){
返回false;
}
@凌驾
公共布尔onQueryTextChange(字符串newText){
contactsAdapter.filterList(新文本);
返回true;
}
});
}
@凌驾
//按钮监听器
公共void onClick(视图v){
((MainActivity)getActivity()).showFragment(新的NewContactFragment(),标记);
}

片段通常只应与其直接的父活动进行通信。片段通过其父活动进行通信,允许该活动管理来自该片段的数据输入和输出,并与其他片段或活动进行协调。将该活动视为管理与每个子活动的所有交互的控制器其中包含的碎片

在另一个片段或中出现了一些例外情况。这两种情况都是片段具有嵌套的子片段,因此允许向上与其父片段(即片段)通信的情况

需要记住的重要一点是,片段不应该直接相互通信,通常只应该与其父活动通信。片段应该是模块化的、独立的和可重用的组件。片段允许其父活动响应意图和回调n大多数情况下

片段和活动有三种通信方式:

  • Bundle-活动可以构造片段并设置参数
  • 方法-活动可以在片段实例上调用方法
  • 侦听器-片段可以通过接口在活动上触发侦听器事件
换句话说,沟通一般应遵循以下原则:

  • 活动可以使用
  • 活动可以将数据传递给片段
  • 片段可以与其父活动通信
  • 片段应将数据传递给仅通过其父活动路由的其他片段
  • 片段可以向和从片段传递数据
  • 片段可以包含

阅读更多有关片段及其通信的信息,请访问

您可以使用界面,可能与深入回答really@isnotmenow重复