将数据从Fragment传递到另一个片段,相同的活动

时间:2014-11-22 11:27:48

标签: java android android-fragments nullpointerexception

我试图将数据从片段1发送到片段2。

我得到NullPointerException,我不知道为什么......

我在谷歌搜索过并发现了很多关于我试图做什么的文章,但我只是想弄清楚一般方法是如何完成的,如果它甚至可能=(

抱歉使用不好的英语,我是初学者......所以...

片段1中使用的代码

  public interface DataMessage {
        public void send(String message);


   }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
try {SM = (DataMessage)activity;
    }catch (ClassCastException e){
throw new ClassCastException("Implement message interface");
}

片段2中使用的代码

  public void getData(String message){
        edt.setText(message);
        Log.i("Disp", "ListHistoryFragment " + message);
    }

活动中使用的代码

public class MyActivity extends ActionBarActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks, ListHistoryFragment.DataMessage
        ...




  @Override
    public void send(String message) {
        //DisplayFragment DispFrag = (DisplayFragment) getSupportFragmentManager().findFragmentById(R.id.fragmenttest);
        DisplayFragment DispFrag = new DisplayFragment();

        FragmentTransaction Transfer = getSupportFragmentManager().beginTransaction();
        DispFrag.getData(message);
        Transfer.replace(R.id.container, DispFrag).addToBackStack(null).commit();

        Log.i("Acitivyt", "ListHistoryFragment " + message);


    }

Log Cat:

 1-22 11:39:01.580  22399-22399/rampanere.packed.package.nl E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at android.rampa.pack.nl.SQL.DisplayFragment.getData(DisplayFragment.java:152)
            at android.rampa.pack.nl.MyActivity.send(MyActivity.java:265)
            at android.rampa.pack.nl.SQL.ListHistoryFragment$1.onItemClick(ListHistoryFragment.java:73)

编辑:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {

                    SM.send(message);
                }

1 个答案:

答案 0 :(得分:0)

要在片段和活动之间共享数据,您应该保留计划在活动中共享的数据实例。 SharedPreferences用于其他目的,例如,存储应用程序启动时所需的数据。

在您的活动中声明一个名为message的受保护/公共字符串,例如。

public class MyActivity extends .... {

    public String message;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ...
}

在第一个片段中,每当您想要保存字符串时使用。

((NAMEOFYOURACTIVITY) getActivity()).message = "THE STRING YOU WANT TO SHARE";

在第二个片段中,要检索您的消息,请使用:

((NAMEOFYOURACTiIVTY) getActivity()).message;

例如:

Log.i("The string in","my activity is: "+((NAMEOFYOURACTiIVTY) getActivity()).message);