如何在选项卡内部使OnNewIntent工作

时间:2018-04-06 11:30:21

标签: java android nfc onnewintent

我正在开发一个项目,我有3个标签。第一个选项卡用于将信息写入NFC标签,其中其他2个选项卡用于从NFC标签读取信息。但是,我遇到了OnNewIntent()方法的问题。正如我在网上阅读中所理解的那样,这种方法仅用于活动,而不是片段。我看过类似的问题和答案,但我并不完全明白在我的情况下需要做些什么来避免这个问题。

以下是第一个标签的代码,我将一些数据写入NFC标签:

public class Home extends Fragment {

NfcAdapter nfcAdapter;
Button writebtn;
Tag tag;
EditText txtName, txtCountry, txtID;

public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view,savedInstanceState);
    nfcAdapter = NfcAdapter.getDefaultAdapter(getContext());

    txtName = (EditText)view.findViewById(R.id.personName);
    txtCountry= (EditText)view.findViewById(R.id.personCountry);
    txtID= (EditText)view.findViewById(R.id.personID);
    writebtn=(Button)view.findViewById(R.id.nfcWriteBtn);

}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    View v= inflater.inflate(R.layout.home, container,false);
    return v;
}

@Override
public void onResume() {
    super.onResume();
    if(nfcAdapter !=null){
        enableForegroundDispatchSystem();
    }
}

@Override
public void onPause() {
    super.onPause();
    disableForegroundDispatchSystem();
}

protected void onNewIntent(final Intent intent) {
    // super.onNewIntent(intent);
    getActivity().getIntent();

    if (intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
        Toast.makeText(getContext(), "NFC tag discovered!", Toast.LENGTH_SHORT).show();

        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        writebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                NdefMessage ndefMessage = createNdefMessage(txtName.getText().toString(), txtCountry.getText().toString(),txtID.getText().toString());

                writeNdefMessage(tag, ndefMessage);
            }
        });
    }

}

1 个答案:

答案 0 :(得分:1)

onNewIntent(Intent intent)属于Activity,你不能在片段中拥有它。您可以做的是在onNewIntent(Intent intent)中调用Activity时将数据传递给您的片段。要实现此目的,您需要覆盖Activity中的onNewIntent()并通知片段有关intent的信息。不要使用getIntent()使用参数中的intent

 @Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // Notify fragment about the new intent
}

你的Fragments方法应该是这样的。

 protected void onNewIntent( Intent intent) {
    if (intent.hasExtra(NfcAdapter.EXTRA_TAG)) {
        Toast.makeText(getContext(), "NFC tag discovered!", Toast.LENGTH_SHORT).show();
        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        writebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                NdefMessage ndefMessage = createNdefMessage(txtName.getText().toString(), txtCountry.getText().toString(),txtID.getText().toString());
                writeNdefMessage(tag, ndefMessage);
            }
        });
    }