Android将数据从一个片段传递到另一个片段

Android将数据从一个片段传递到另一个片段,android,fragment,Android,Fragment,我想将数据从一个片段传递到B片段。。然后B片段变成A片段。但当我把A传给B时,它是完美的。但当我把B传递给A时,它会给我nullpointexception 我的代码在这里, 一块碎片 public static PlayRadioFragment newInstance(String url, String name, String value) { Bundle args = new Bundle(); args.putString(URL, url); args.p

我想将数据从一个片段传递到B片段。。然后B片段变成A片段。但当我把A传给B时,它是完美的。但当我把B传递给A时,它会给我nullpointexception

我的代码在这里, 一块碎片

public static PlayRadioFragment newInstance(String url, String name, String value) {
    Bundle args = new Bundle();
    args.putString(URL, url);
    args.putString(NAME, name);
    args.putString(VALUE, value);
    PlayRadioFragment fragment = new PlayRadioFragment();
    fragment.setArguments(args);
    return fragment;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.play_radio, container, false);
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setHasOptionsMenu(true);
try {
        url = getArguments().getString(URL);
        if (url.length() > 0) {
            url_string = getArguments().getString(URL);
            name_string = getArguments().getString(NAME);
            image_url = getArguments().getString(VALUE);
            value = getArguments().getString(VALUE);
            name.setText(name_string);

            Log.e("url", url_string);
            Log.e("name", name_string);

            playRadio();

            image = (ImageView) getView().findViewById(R.id.imageView);
            if (image_url.length() != 0) {
                Picasso.with(getActivity()).load(image_url).fit()
                        .tag(this).into(image);
            }
        } else {
            try {
                MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
                digest.update(package_name.trim().getBytes());
                byte messageDigest[] = digest.digest();
                StringBuffer hexString = new StringBuffer();
                for (int i = 0; i < messageDigest.length; i++)
                    hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
                getRadioChannelList(hexString.toString());
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    } catch (NullPointerException e) {
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
            digest.update(package_name.trim().getBytes());
            byte messageDigest[] = digest.digest();
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < messageDigest.length; i++)
                hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
            getRadioChannelList(hexString.toString());
        } catch (NoSuchAlgorithmException e2) {
            e.printStackTrace();
        } catch (JSONException e2) {
            e.printStackTrace();
        }
        e.printStackTrace();
    }


    actionPlayStop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (url_string.length() > 0) {
                Intent intent = new Intent(getActivity(),
                        RadioService.class);
                if (mRadioService != null) {
                    getActivity().stopService(intent);
                    unBindMyService();
                } else {
                    playRadio();
                }
            }
        }
    });
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            Intent i=new Intent(getActivity(),
                    PreferenceActivity.class);
            startActivity(i);
            break;

        case R.id.radio_list:
            Gson gson = new Gson();
            JsonElement element = gson.toJsonTree(channelList,
                    new TypeToken<List<ChannelPojo>>() {
                    }.getType());
            ((MainActivity2) getActivity()).changeFragment(new MainFragment().newInstance(element.getAsJsonArray()
                    .toString(), value));
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

但我无法理解从B传递到碎片有什么问题。请帮帮我。。谢谢。

我认为这条线路有问题:

 changeFragment(new PlayRadioFragment()); // do not initialize fragment like this
遵循您的片段结构,我认为无论何时您想要创建片段实例,请使用此代码来启动它

 MainFragment mainFragment = MainFragment.newInstance("url", "value");
谢谢。

试试这个

  • 在每个片段中创建接口
  • 在每个接口中,使用数据
  • 在活动类中实现这两个接口
  • 在每个重写的方法中,将值传递给每个片段

在片段A中,是否可以发布用于从参数获取数据的代码。尝试更改:ft.replace(R.id.container,f,“Radio”);收件人:ft.replace(R.id.container,f);@我能知道哪一行有空指针异常吗?@Das:main活动的名称是“MainActivity”或“MainActivity2”?还有logcat,谢谢。。!!正如@Mamata所说的,您能告诉我们您在哪里收到空指针吗(即当您收到空指针时,您试图从参数中获得哪个值)
 changeFragment(new PlayRadioFragment()); // do not initialize fragment like this
 MainFragment mainFragment = MainFragment.newInstance("url", "value");