Piszę aplikację, która używa NFC do odczytu niektórych danych na niej zapisanych. Moja aplikacja używa Fragmentów i Fragmentów, które nie pochodzą z metody onNewIntent(). Ponieważ dane, które czytam, są wykonywane za pomocą mojej oddzielnej klasy, która obsługuje operację związaną z NFC, jedyną rzeczą, którą muszę zrobić, to zaktualizować TextView wewnątrz Fragmentu. Jednak ta implementacja może być również wykorzystana do przekazania nowego zamiaru Fragmentowi.Obsługa nowego fragmentu
Oto moja obecna implementacja, która wykorzystuje interfejs. Dzwonię do słuchacza po otrzymaniu nowej intencji i sprawdzeniu związanym z NFC. To jest FragmentActivity, który obsługuje Fragment.
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);
}
}
To MyBalance Fragment, który ma TextView że musi być aktualizowany, gdy NFC jest czytany:
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);
}
}
ten kod działa idealnie jak oczekiwano dla mojej aplikacji, ale chcę wiedzieć, czy jest lepszy sposób obsługi nowych intencji z fragmentów?
Checkout ten link wygląda podobnie do Twojego wymagania http://stackoverflow.com/questions/17144512/pass-intent-to-my-fragment?noredirect=1&lq=1 –