如何使 OnNewIntent 在选项卡内工作
how to make OnNewIntent work inside tabs
我正在做一个有 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);
}
});
}
}
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);
}
});
}
我正在做一个有 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);
}
});
}
}
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);
}
});
}