2014-11-22 69 views
0

我尝试从片段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); 


    } 

登录猫:

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); 
       } 
+0

使用共享Prefrences的活动之间共享数据和片段 – koutuk 2014-11-22 11:33:08

+0

你怎么骂'发送'方法在你的片段?请复制你的代码。 – 2014-11-22 11:33:58

+0

增加了一些代码 – Rampadin 2014-11-22 11:39:57

回答

0

要在分段和活动之间共享数据,您应该保留您打算在活动中分享的数据实例。 SharedPreferences专用于其他目的,例如,存储每当您的应用程序启动时您将需要的数据。

您的活动内部声明了一个名为message的protected/public String例如。

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); 
+0

getActivity用于片段,而不是活动的权利? – Rampadin 2014-11-22 11:39:27

+0

是的,getActivity()将返回加载片段的Activity实例。我刚刚编辑了我的答案=) – 2014-11-22 11:44:09

+0

SO,一个名为message()的方法应该在主要活动中声明,供我分享? 虽然我想分享的字符串,但在分段1中创建。 – Rampadin 2014-11-22 11:45:37

相关问题