NFCを使用して、そこに格納されているデータを読み取るアプリケーションを作成しています。私のアプリケーションでは、フラグメントとフラグメントはonNewIntent()メソッドに付属していません。私が読んでいるデータは、NFC関連の操作を扱う私の別のクラスで行われるので、私がする必要があるのは、フラグメント内のTextViewを更新することだけです。ただし、このインプリメンテーションを使用して、新しいIntentをFragmentに渡すこともできます。フラグメント内のonNewIntentの処理
ここに私の現在の実装があり、これはインターフェイスを利用しています。新しいIntentが受信され、NFC関連のチェックが成功した後、リスナーに電話しています。これは、FragmentをホストするFragmentActivityです。
public class Main extends FragmentActivity implements
ActionBar.OnNavigationListener {
private Bundle myBalanceBundle;
private NFC nfcObj;
private NewBalanceListener newBlanceListener;
@Override
public void onNewIntent(Intent intent) {
setIntent(intent);
}
@Override
protected void onResume() {
getNFCState();
super.onResume();
}
private void getNFCState() {
//Other NFC related codes
else if (nfc_state == NFC.NFC_STATE_ENABLED){
readNFCTag();
}
}
private void readNFCTag() {
//Other NFC related codes
if (getIntent().getAction().equals(NfcAdapter.ACTION_TECH_DISCOVERED)) {
nfcObj.setTag((Tag) getIntent().getParcelableExtra(
NfcAdapter.EXTRA_TAG));
nfcObj.readQuickBalance();
transitQuickReadFragment(nfcObj.getCurrentBalance());
}
}
private void transitQuickReadFragment(String balance) {
// Creates a balance bundle and calls to select MyBalance Fragment if it
// is not visible. Calls listener is it is already visible.
if (actionBar.getSelectedNavigationIndex() != 1) {
if (myBalanceBundle == null)
myBalanceBundle = new Bundle();
myBalanceBundle.putString(Keys.BALANCE.toString(), balance);
actionBar.setSelectedNavigationItem(1);
} else {
newBlanceListener.onNewBalanceRead(balance);
}
}
@Override
public boolean onNavigationItemSelected(int position, long id) {
// Other fragment related codes
fragment = new MyBalance();
fragment.setArguments(myBalanceBundle);
newBlanceListener = (NewBalanceListener) fragment;
// Other fragment related codes
}
// Interface callbacks. You can pass new Intent here if your application
// requires it.
public interface NewBalanceListener {
public void onNewBalanceRead(String newBalance);
}
}
これは、NFCが読み込まれるたびに更新する必要があるのTextViewを持ってMyBalance断片である:
public class MyBalance extends Fragment implements NewBalanceListener {
private TextView mybalance_value;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//Other onCreateView related code
Bundle bundle = this.getArguments();
if (bundle != null)
mybalance_value.setText(bundle.getString(Keys.BALANCE.toString(),
"0.00"));
else
mybalance_value.setText("0.00");
//Other onCreateView related code
}
@Override
public void onNewBalanceRead(String newBalance) {
mybalance_value.setText(newBalance);
}
}
このコードは、私の応用が期待完璧に同じように動作しますが、私はよりよいがあるかどうかを知りたいですフラグメントから新しいインテントを処理する方法は?
このリンクにアクセスするには、あなたの要求に似ているhttp://stackoverflow.com/questions/17144512/pass-intent-to-my-fragment?noredirect=1&lq=1 –