如何在两个片段之间传递数据?

时间:2015-08-21 10:10:50

标签: android android-fragments

我有两个活动和两个片段:detialActivity和detialActivityFragment,mainActivity和mainActivityFragment。 我如何在detialActivityFragment和mainActivityFragment之间传递数据。 当我尝试传递数据时显示异常:java.lang.NullPointerException 我制作了界面:

  public interface OnButtonPressListener { 
        public void onButtonPressed(String msg);
    }

内部类mainActivityFragment:

 @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
           try {
                buttonListener = (OnButtonPressListener) getActivity();
            } catch (ClassCastException e) {
                throw new ClassCastException(activity.toString() + " must 
                implement onButtonPressed");
            }
        }

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_main, container, 
        false);
        listMovie = (GridView) root.findViewById(R.id.gridview_movie);

        listMovie.setOnItemClickListener(new  AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                buttonListener.onButtonPressed("hi");
            }
        });
        return root;
    }

内部类detialActivityFragment:

void setMessage(String msg){
   TextView txt=(TextView)root.findViewById(R.id.titleDetialMovie);
   txt.setText(msg);
}

内部类detialActivity:

 @Override
    public void onButtonPressed(String msg) {
        DetialActivityFragment Obj=(DetialActivityFragment)                   
   getSupportFragmentManager().findFragmentById(R.id.detialActivityFragment);
        Obj.setMessage(msg);
    }

3 个答案:

答案 0 :(得分:1)

你不应该这样调用方法。 而是将数据传递给Fragment的构造函数并在那里使用它。

答案 1 :(得分:0)

它几乎就像活动之间传递的数据一样。从mainActivity传递包中的字符串值并在detailedActivity中获取相同内容并将它们发送到detailedFragment以显示名称。

答案 2 :(得分:0)

为了在两个fragments之间传递数据,您应该使用Bundle,请参阅Google文档以获取更多信息。

Fragment-A:----
Bundle bundle= new Bundle();
bundle.putString("Key",thevalue);
fragment.setArguments(bundle);
Fragment-B:----
Bundle bundle=getArguments();
String value=bundle.getString("key");

这是做什么的粗略例子。