[英]Pass Data from Fragment to another fragment, same activity
im trying to send data from fragment 1, to fragment 2. 我试图将数据从片段1发送到片段2。
Im getting a NullPointerException
, and i dont quite know why.. 我得到了
NullPointerException
,我不知道为什么。
I have searched on google and found a lot of articles about, what im trying to do, but i just cant figure out how the general way is done, and if its even possible=( 我在Google上进行搜索,发现了很多有关我想做的事情的文章,但我只是想不通一般的方法,甚至可以做到=(
sorry for using bad english, and im a beginner so... 很抱歉使用英语不好,我是初学者,所以...
Code used in Fragment 1 片段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");
}
Code Used in Fragment 2 片段2中使用的代码
public void getData(String message){
edt.setText(message);
Log.i("Disp", "ListHistoryFragment " + message);
}
Code used in Activity 活动中使用的代码
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)
EDIT: 编辑:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
SM.send(message);
}
To share data between fragments and activities you should keep an instance of the data you are planning to share in your activity. 要在片段和活动之间共享数据,应保留一个计划在活动中共享的数据实例。 SharedPreferences are intended to other purposes, for example, storing data that you will need whenever your application starts.
SharedPreferences用于其他目的,例如,存储应用程序启动时所需的数据。
Inside your activity declare a protected/public String called message for example. 例如,在您的活动内部声明一个称为message的受保护/公共字符串。
public class MyActivity extends .... {
public String message;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
Inside your first fragment, whenever you want to save your String use. 在您的第一个片段中,每当您要保存String使用时。
((NAMEOFYOURACTIVITY) getActivity()).message = "THE STRING YOU WANT TO SHARE";
Inside your second fragment, to retrieve your message use: 在第二个片段中,要检索消息,请使用:
((NAMEOFYOURACTiIVTY) getActivity()).message;
For example: 例如:
Log.i("The string in","my activity is: "+((NAMEOFYOURACTiIVTY) getActivity()).message);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.