Android fragments 与活动运行时的片段通信(在获得用户输入后)

Android fragments 与活动运行时的片段通信(在获得用户输入后),android-fragments,android-viewpager,bundle,android-tablayout,Android Fragments,Android Viewpager,Bundle,Android Tablayout,我在MainActivity中使用viewpager进行了工厂和表格布局。当用户通过FAB提供输入时,我想更新viewpager的片段。试图通过Bundle发送数据,但从fragment接收时Bundle始终为null。 我认为我的问题在于接收数据。我应该使用哪个片段方法来接收数据 这是我的主要活动 package com.example.shahalam.rvfabvptl; import android.support.design.widget.FloatingActionButton;

我在MainActivity中使用viewpager进行了工厂和表格布局。当用户通过FAB提供输入时,我想更新viewpager的片段。试图通过Bundle发送数据,但从fragment接收时Bundle始终为null。 我认为我的问题在于接收数据。我应该使用哪个片段方法来接收数据

这是我的主要活动

package com.example.shahalam.rvfabvptl;

import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    EditText title, description;
    FloatingActionButton fab;
    ViewPager mPager;
    TabLayout tabLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mPager = findViewById(R.id.viewPager);
        tabLayout = findViewById(R.id.tabLayout);
        fab = findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
                View mView = getLayoutInflater().inflate(R.layout.dialog_box,null);

                title = mView.findViewById(R.id.titleDialogBox);
                description = mView.findViewById(R.id.descriptionDialogBox);
                Button btnOK = mView.findViewById(R.id.btnOk);

                mBuilder.setView(mView);
                final AlertDialog dialog = mBuilder.create();
                dialog.show();
                btnOK.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        FragmentManager fm = getSupportFragmentManager();
                        final FragmentTransaction ft = fm.beginTransaction();
                        final FragmentOne fragOne = new FragmentOne();
                        Bundle mBundle = new Bundle();

                        mBundle.putString("title", title.getText().toString());
                        mBundle.putString("description", description.getText().toString());

                        //PASS OVER THE BUNDLE TO OUR FRAGMENT
                        FragmentOne myFragment = new FragmentOne();
                        myFragment.setArguments(mBundle);

                        ft.add(R.id.linearLayoutFragmentOne,fragOne);
                        ft.commit();
                        dialog.cancel();
                    }
                });
            }
        });

        ViewPagerAdapter pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(pagerAdapter);

        tabLayout.setupWithViewPager(mPager);

    }

}
这是我的片段类:

    package com.example.shahalam.rvfabvptl;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class FragmentOne extends Fragment {

    public FragmentOne() {
    }

    RecyclerView fragOneRecyclerView;
    List<MyDataModel> myDataModels = new ArrayList<>();
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_one,container,false);

        fragOneRecyclerView = view.findViewById(R.id.fragmentOneRecyclerView);
        fragOneRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        final RecyclerViewAdapter adapterFragmentOne = new RecyclerViewAdapter(getContext(),myDataModels);
        fragOneRecyclerView.setAdapter(adapterFragmentOne);

        Bundle mBundle =getArguments();
        String title="if Bundle is null", description="No description";
        if (mBundle != null) {
            title = this.getArguments().getString("title");
            description = this.getArguments().getString("description");
        }

        MyDataModel mOne4 = new MyDataModel(title,description);

        myDataModels.add(mOne4);

        adapterFragmentOne.notifyDataSetChanged();

        return view;
    }


}
package com.example.shahalam.rvfabvptl;
导入android.app.Activity;
导入android.os.Bundle;
导入android.support.annotation.NonNull;
导入android.support.annotation.Nullable;
导入android.support.design.widget.FloatingActionButton;
导入android.support.v4.app.Fragment;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入android.widget.Toast;
导入java.util.ArrayList;
导入java.util.List;
公共类FragmentOne扩展了Fragment{
公共碎片1(){
}
回收视图FragoneRecycleView;
List myDataModels=new ArrayList();
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(右布局。碎片1,容器,假);
FragoneRecycleView=view.findViewById(R.id.FragmentOneRecycleView);
setLayoutManager(新的LinearLayoutManager(getContext());
最终RecycleWebAdapterFragmentone=新的RecycleWebAdapter(getContext(),myDataModels);
fragOneRecyclerView.setAdapter(adapterFragmentOne);
Bundle mBundle=getArguments();
String title=“如果Bundle为null”,description=“无描述”;
如果(mBundle!=null){
title=this.getArguments().getString(“title”);
description=this.getArguments().getString(“description”);
}
MyDataModel mOne4=新的MyDataModel(标题、说明);
myDataModels.add(mOne4);
adapterFragmentOne.notifyDataSetChanged();
返回视图;
}
}
您正在创建片段的两个不同对象
FragmentOne
, 和
将bundle设置为object myFragment
传递另一个fragment对象FragmentTransition。
哪一个错误,请使用 下面是代码


@shah alam使用上述代码,它将帮助解决您的问题。谢谢,@Thunder,但很抱歉,它不起作用。我是初学者。可能又错了。我正在github中共享我的项目。你能回顾一下我的整个项目吗?这是我的项目链接:修复了所有错误并将代码推送到您的回购,使用它作为您的需求代码:)
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
FragmentOne fragOne = new FragmentOne();
Bundle mBundle = new Bundle();
mBundle.putString("title", title.getText().toString());
mBundle.putString("description", description.getText().toString());

  //PASS OVER THE BUNDLE TO OUR FRAGMENT
  fragOne.setArguments(mBundle);
  ft.add(R.id.linearLayoutFragmentOne,fragOne);
  ft.commit();
  dialog.cancel();