我在ViewPager中有多个片段。如何将第一个EditText数据片段分段到最后片段?
我在第一个片段中设置了值,如下所示 -
txtConsAcNo.setText(account_no);
txtMeterSrMo.setText(mtr_serial_no);
现在我得到这个txtConsAcNo,txtMeterSrMo值,我的最后一个片段如下 -
ConDetFirstFragment f1 = new ConDetFirstFragment();
txtConsAcNo = f1.txtConsAcNo.getText().toString();
txtMeterSrMo = f1.txtMeterSrMo.getText().toString();
现在我想要的是我获得Null值并且我的应用程序不幸被停止了。我希望将这些数据放到我的最后一个没有包的片段中。我怎么能做到这一点?
答案 0 :(得分:1)
在不创建界面,捆绑或意图的情况下很容易实现这一点 -
我已经在所有片段中声明了所有变量" Public Static"喜欢下面 -
public static EditText txtConsAcNo, txtMeterSrMo;
在任何片段之后,我已声明变量以获取如下所示的数据 -
public static String txtConsAcNo,txtMeterSrMo;
现在我创建了一个函数来从上面的变量中获取第一个片段的值 -
public static void getalldata(){
ConDetFirstFragment f1 = new ConDetFirstFragment();
txtConsAcNo = f1.txtConsAcNo.getText().toString();
txtMeterSrMo = f1.txtMeterSrMo.getText().toString();
}
快乐编码......
答案 1 :(得分:0)
这里有几个问题:
为了达到你所需要的,你需要跳过几个圈。
假设源文本是EditText对象(即可由用户编辑),则为每个EditText对象添加TextWatcher。
创建界面:
public interface TextPurveyor {
void setText1(String t);
String getText1();
void setText2(String t);
String getText1();
}
在主机Activity中实现此接口;并在活动中本地保存文本值。不要忘记使用其余的活动状态保存/恢复它们。
使TextWatcher对象在主机活动上调用相应的setText(..)方法:
((TextPurveyor)getActivity()).setText1(...);
让每个片段检查主机活动是否实现此方法。
当第二个片段想要一个字符串时,请询问活动:
((TextPurveyor)getActivity()).getText1();
答案 2 :(得分:0)
为避免紧密耦合您的项目代码,请尝试使用已经证明最适用的设计模式,如Publisher/Subscriber
,我将在下面向您展示:
我的项目中总是使用一个名为EventBus
的流行库 - 只需将以下内容添加到依赖项下的build.gradle
(模块级)文件中:
compile 'org.greenrobot:eventbus:3.0.0'
其次,创建一个简单的Plain Old Java Object (POJO)
来代表您的活动:
public class FragmentAToLastEvent{
private String txtConsAcNo;
private String txtMeterSrMo;
FragmentAToLastEvent(String acNo, String srMO){
this.txtConsAcNo = acNO;
this.txtMeterSrMo = srMO;
}
//getters and setters if needed
public String gettxtConsAcNo(){
return txtConsAcNo;
}
public String gettxtMeterSrMo(){
return txtMeterSrMo;
}
}
下一步是在这里实际使用您的Event类:
因此,在您希望从EditText
发送文本的片段中,只需执行以下操作:
String txtConsAcNo = f1.txtConsAcNo.getText().toString();
String txtMeterSrMo = f1.txtMeterSrMo.getText().toString();
EventBus.getDefault().post(new FragmentAToLastEvent(txtConsAcNo, txtMeterSrMo));
在你的最后一个片段中,只需完成此操作即可:
片段内onCreate
或onAttach
:
//register your event - making this class a subscriber
EventBus.getDefault().register(this)
//next, override a single method to receive the values you passed from above code (Fragment 1?)
public void onEvent(FragmentAToLastEvent event){
String txtConsAcNo = event.gettxtConsAcNo();
String txtMeterSrMo = event.gettxtMeterSrMo();
//now you can use your text here without problems!
}
最后,记得在onDestroy中取消注册:
@Override
public void onDestroy(){
super.onDestroy();
EventBus.getDefault().unregister(this);
}
这是我一直以来所做的事情,而且它更干净,没有使用你的片段必须实现的接口并完成所有这些!
我希望你觉得它对你有所帮助并祝你好运!