【发布时间】:2016-04-07 17:23:54
【问题描述】:
我是碎片通信的新手,所以我真的需要你的帮助。我有一个片段活动和两个片段。
在我的 Fragment A 中,我有一个 edittext(默认值为 null),用户必须在其中输入一个数字。因此,为了捕获输入值,我使用了 addTextChangedListener。在捕获edittext 的新值之后,Fragment A 必须将该值(字符串)传递给容器活动,并且该活动现在已经接收到该值(字符串)。现在这个活动必须将值(字符串)传递给 Fragment B。
到目前为止,这是我尝试过的
FragmentActivity:
public String strDocNum;
@Override
public void onDataPass(String data) {
// TODO Auto-generated method stub
Log.d("Document From", data);
strDocNum = data;
}
片段 A:
OnDataPass dataPasser;
private void getRecords() {
// TODO getRecords
// TODO To call methods from fragment to activity
((ReceivingStocks)getActivity()).dbConnect();
strLastDocumentNumber = ((ReceivingStocks)getActivity()).dbHelper.getLastDocumentNumber();
Log.d("Doc Num", "" + strLastDocumentNumber);
etDocumentNumber.setText(strLastDocumentNumber);
etDocumentFrom.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO afterTextChanged
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
System.out.println("Before text changed " + new String(s.toString()));
}
public void onTextChanged(CharSequence s, int start, int before, int count) {
System.out.println("Ontext changed " + new String(s.toString()));
if(s.toString().isEmpty()){
} else {
strDocumentFrom = s.toString();
strTransactionDate =
((ReceivingStocks)getActivity()).dbHelper.getTransactionDateByDocumentNumber(strDocumentFrom);
strTotalAmount =
((ReceivingStocks)getActivity()).dbHelper.getTotalAmountByDocumentNumber(strDocumentFrom);
strVan =
((ReceivingStocks)getActivity()).dbHelper.getVanByDocumentNumber(strDocumentFrom);
etTransactionDate.setText(strTransactionDate);
etTotalAmount.setText(strTotalAmount);
Log.d("Van", "" + strVan);
etVan.setText(strVan);
// TODO TO PASS DATA FROM FRAGMENT TO ACTIVITY
dataPasser.onDataPass(strDocumentFrom);
}
}
});
}
public interface OnDataPass {
public void onDataPass(String data);
}
public void passData(String data) {
dataPasser.onDataPass(data);
}
@Override
public void onAttach(Activity a) {
super.onAttach(a);
dataPasser = (OnDataPass) a;
}
片段 B:
private void getRecords() {
// TODO getRecords
// TODO To call methods from fragment to activity
((ReceivingStocks)getActivity()).dbConnect();
String mLabel = ((ReceivingStocks)getActivity()).strDocNum;
Log.d("Document Number From Header", "" + mLabel);
strUnitOfMeasure = ((ReceivingStocks)getActivity()).dbHelper.getUnitOfMeasureByDocumentNumber(mLabel);
strQTY = ((ReceivingStocks)getActivity()).dbHelper.getQTYByDocumentNumber(mLabel);
strUnitPrice = ((ReceivingStocks)getActivity()).dbHelper.getUnitPriceByDocumentNumber(mLabel);
strAmount = ((ReceivingStocks)getActivity()).dbHelper.getAmountByDocumentNumber(mLabel);
try{
if(mLabel.isEmpty()){
} else {
String str = ((ReceivingStocks)getActivity()).dbHelper.getItemCodeByDocumentNumber(mLabel);
Log.d("Item Code", "" + str);
etItemCode.setText(str);
etUnitOfMeasure.setText(strUnitOfMeasure);
etQuantity.setText(strQTY);
etUnitPrice.setText(strUnitPrice);
etAmount.setText(strAmount);
}
} catch(SQLiteException e){
Log.d("Error", "" + e);
}
}
到目前为止,我成功地将数据从 Fragment A 传递到 Activity。但是从 Activity 到 Fragment B 它传递了默认值为 null,因此我的 logcat 抛出 NullPointerException。有任何想法吗?我真的迷路了。您的帮助将真正受到我的赞赏。谢谢。
【问题讨论】:
标签: android android-fragments android-fragmentactivity