我创建了一个片段,但不知道该在里面放什么



我已经实现了一个NFC(扫描标签(应用程序,但现在我必须创建与我的MainActivity一起工作的片段,因为我想在未来实现ViewPager

问题是,我真的是一个初学者,我的代码变得太大了,不知道我必须在ActivityFragment中放什么

我试图理解的一周。。。

这是我的代码

public class MainActivity extends FragmentActivity {
ObjectAnimator anim;
ObjectAnimator anim2;
private int display, result, detect = 0;
private NfcAdapter nfcAdapter;
private ImageButton nfcButton;
private PendingIntent pendingIntent;
private ImageButton qrButton;
private TextView text;
private ImageButton webButton;
String link = null;
public final int CUSTOMIZED_REQUEST_CODE = 0x0000ffff;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
slidr = Slidr.attach(this);
setDetect(1);
setContentView((int) R.layout.activity_main);
this.text = (TextView) findViewById(R.id.text);
this.nfcAdapter = NfcAdapter.getDefaultAdapter(this);
this.nfcButton = (ImageButton) findViewById(R.id.nfc_button);
this.anim = ObjectAnimator.ofFloat(this.nfcButton, "scaleX", new float[]{0.9f});
this.anim2 = ObjectAnimator.ofFloat(this.nfcButton, "scaleY", new float[]{0.9f});
IntentIntegrator integrator = new IntentIntegrator(this);
this.nfcButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setDisplay(1);
manageBlinkEffect();
}
});
this.pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {                                   // RESULTAT DU SCAN QR CODE
if (requestCode != CUSTOMIZED_REQUEST_CODE && requestCode != IntentIntegrator.REQUEST_CODE) {
super.onActivityResult(requestCode, resultCode, data);
return;
}
switch (requestCode) {
case CUSTOMIZED_REQUEST_CODE: {
Toast.makeText(this, "REQUEST_CODE = " + requestCode, Toast.LENGTH_LONG).show();
break;
}
default:
break;
}
IntentResult result = IntentIntegrator.parseActivityResult(resultCode, data);
if (result.getContents() != null) {
Log.d("MainActivity", "Scanned");
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Résultat du scan :");
if (URLUtil.isValidUrl(result.getContents())) {                                                                      // si url...
builder.setNeutralButton("Visiter", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setPositiveButton("Fermer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { }
});
builder.setNegativeButton("Copier", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Texte copié", result.getContents());
clipboard.setPrimaryClip(clip);
}
});
} else {                                                                                                             // si plain text...
builder.setNeutralButton("Copier", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Texte copié", result.getContents());
clipboard.setPrimaryClip(clip);
}
});
builder.setPositiveButton("Fermer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) { }
});
}
builder.setMessage(result.getContents().toString());
builder.create().show();
}
}

public void manageBlinkEffect() {                                                                           // ANIMATION DU LOGO SENZU SUITE A UN CLIC
anim.setDuration(1000);
anim.setRepeatMode(ValueAnimator.REVERSE);
anim.setRepeatCount(9);
anim.start();
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationCancel(animation);
if (getRes() != 1){
Animation shake = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.shake);
Toast.makeText(getApplicationContext(), "Aucun badge n'a été détécté !", Toast.LENGTH_SHORT).show();
nfcButton.startAnimation(shake);
}
}
});
anim2.setDuration(1000);
anim2.setRepeatMode(ValueAnimator.REVERSE);
anim2.setRepeatCount(9);
anim2.start();
}
public void onResume() {
super.onResume();
Intent intent = getIntent(); // Recuperer l'intent actuel
NdefMessage[] msgs;
if (getDetect() == 1 && (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(intent.getAction()))) { // si l'application a ete lancee via une detection NFC du device  (ACTION_NDEF_DISCOVERED, voir AndroidManifest)
Parcelable[] rawMessages =
intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");
if (rawMessages != null) { // si NDEF dans le scan
setDisplay(1);
resolveIntent(intent); // parser le scan NFC
}  else {
byte[] empty = new byte[0];
byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] payload = NdefMessageParser.dumpTagData(tag).getBytes();
NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, id, payload);
NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
msgs = new NdefMessage[] {msg};
setDetect(0);
getResult(msgs);
}
}
NfcAdapter nfcAdapter2 = this.nfcAdapter;
if (nfcAdapter2 != null) {
if (!nfcAdapter2.isEnabled()) {
showWirelessSettings();
}
this.nfcAdapter.enableForegroundDispatch(this, this.pendingIntent, (IntentFilter[]) null, (String[][]) null);
}
}
private void showWirelessSettings() {
Toast.makeText(this, "Veuillez activer le service NFC", Toast.LENGTH_SHORT).show();
startActivity(new Intent("android.settings.WIRELESS_SETTINGS"));
}
public void onPause() {
setDetect(0);
super.onPause();
}

public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
if (getDetect() != 1) {
resolveIntent(intent);
}
}
private void resolveIntent(Intent intent) {                                                                 // DETECTION NFC ET PARSING NDEF
NdefMessage[] msgs;
String action = intent.getAction();
Log.d("Infos", getIntent().toString());
Log.d("Infos", "display = " + display);
if (getDisplay() != 1) {
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
nfcButton.startAnimation(shake);
Toast.makeText(this, "Veuillez lancer un scan", Toast.LENGTH_LONG).show();
return;
}
else if ("android.nfc.action.TAG_DISCOVERED".equals(action) || "android.nfc.action.TECH_DISCOVERED".equals(action) || "android.nfc.action.NDEF_DISCOVERED".equals(action)) {
setRes(1);
Parcelable[] rawMsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
} else {
byte[] empty = new byte[0];
byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
Tag tag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
byte[] payload = NdefMessageParser.dumpTagData(tag).getBytes();
NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, id, payload);
NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
msgs = new NdefMessage[] {msg};
}
if (getDisplay() == 1) {
getResult(msgs);
}
}
}
private void getResult(NdefMessage[] msgs) {                                                            // MODAL AVEC RESULTAT DU SCAN NFC
if (msgs != null && msgs.length != 0) {
final StringBuilder tmp_builder = new StringBuilder();
List<ParsedNdefRecord> records = NdefMessageParser.parse(msgs[0]);
int size = records.size();
for (int i = 0; i < size; i++) {
tmp_builder.append(records.get(i).str());
tmp_builder.append("n");
}
System.out.println(tmp_builder.toString());
this.anim.cancel();
this.anim2.cancel();
setDisplay(0);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Resultat du scan :");
builder.setNeutralButton("Visiter", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
/*  Intent i = new Intent(MainActivity.this, RightActivity.class);
link = tmp_builder.toString();
i.putExtra("url", link);
startActivity(i);*/
}
});
builder.setNegativeButton("Copier", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Texte copié", link);
clipboard.setPrimaryClip(clip);
}
});
builder.setPositiveButton("Fermer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {}
});
builder.setMessage(tmp_builder.toString());
builder.create().show();
}
}

我不知道我是否必须在我的碎片中转移我的onResumeonPause

真的输了。。。

我认为您需要在阶段中进行更改

我会理解viewpager和碎片是如何工作的https://abhiandroid.com/materialdesign/viewpager教程

下一阶段是创建带有nfcButton的第一个片段,但不要试图将其与NFC内容连接起来。

这是因为处理NFC的起点必须在"活动"中,因为您要覆盖"活动"方法来执行此操作。

这基本上是将下面的代码放入片段的onViewCreated方法中,并将与按钮相关的xml移动到片段的xml 中

this.text = (TextView) findViewById(R.id.text);
this.nfcButton = (ImageButton) findViewById(R.id.nfc_button);
this.anim = ObjectAnimator.ofFloat(this.nfcButton, "scaleX", new float[]{0.9f});
this.anim2 = ObjectAnimator.ofFloat(this.nfcButton, "scaleY", new float[]{0.9f});
this.nfcButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// setDisplay should not be used at this stage
// setDisplay(1);
manageBlinkEffect();
}
});

同时将方法manageBlinkEffect()移动到片段。

你现在也应该在getResult中评论

this.anim.cancel();
this.anim2.cancel();

然后在主xml文件中设置您的视图寻呼机

现在注释掉这些行的原因是这些行需要活动到片段的通信,你应该理解https://developer.android.com/training/basics/fragments/communicating

下一阶段是将您的按钮连接回setDetect Flag(替换注释掉的setDetect()行(

即,你的碎片和nfcButton必须告诉MainActivity开始处理它发送给的任何NFC数据

然后,getResult中的MainActivity需要告诉具有nfc的Fragment停止为其按钮设置动画,如果具有按钮的Fragments正在显示,并且该Fragment已启动并正在运行。这一次也是从活动到片段的片段通信。

首先,您应该在XML中添加ViewPager;

然后;

在你的活动中,这样定义你的寻呼机;

viewPager = findViewById(R.id.viewpager_main)

然后使用此设置视图寻呼机

setupViewPager(viewPager)

创建类似的setupViewPager函数;

private fun setupViewPager(viewPager: ViewPager) {
val adapter = ViewPagerAdapter(supportFragmentManager)
adapter.addFragment(
MainFragment(),
"Fragment1"
)
adapter.addFragment(
SecondFragment(),
"Fragment2"
)
viewPager.adapter = adapter}

碎片的简单示例;

class MainFragment() : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? =
inflater.inflate(R.layout.info_screen_fragment, container, false)
/* info_screen_fragment is your xml for this fragment */
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
}

我和科特林一起写的密码。但我习惯了这些密码。简单灵活。

相关内容

最新更新