Android 在适配器中使用NFC
您好,我正在使用自定义适配器填充复选框的列表视图。主要活动是一个片段(不是活动)。 每个复选框都有名称和ID,例如Shells-12345。我试图做的是当屏幕加载,用户扫描RFID标签时,它读取标签ID,例如12345,如果他们的ID匹配,复选框就会被选中。 我怎样才能做到这一点 任何帮助都将不胜感激,谢谢 编辑: 我在登录部分使用了nfc,如下所示:Android 在适配器中使用NFC,android,nfc,listview-adapter,Android,Nfc,Listview Adapter,您好,我正在使用自定义适配器填充复选框的列表视图。主要活动是一个片段(不是活动)。 每个复选框都有名称和ID,例如Shells-12345。我试图做的是当屏幕加载,用户扫描RFID标签时,它读取标签ID,例如12345,如果他们的ID匹配,复选框就会被选中。 我怎样才能做到这一点 任何帮助都将不胜感激,谢谢 编辑: 我在登录部分使用了nfc,如下所示: public class loginPage extends AppCompatActivity { DateFormat time
public class loginPage extends AppCompatActivity {
DateFormat time = new SimpleDateFormat("h:mm a");
DateFormat date = new SimpleDateFormat("yyyy.MM.dd ");
NfcAdapter mAdapter;
PendingIntent pendingIntent;
private String serialId = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_page);
mAdapter = NfcAdapter.getDefaultAdapter(this);
pendingIntent = PendingIntent.getActivity(
this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
if (mAdapter == null) {
Toast.makeText(this,
"NFC NOT supported on this devices!",
Toast.LENGTH_LONG).show();
finish();
} else if (!mAdapter.isEnabled()) {
Toast.makeText(this,
"NFC NOT Enabled!",
Toast.LENGTH_LONG).show();
finish();
}
//buttonbypass
Button toMain = (Button) findViewById(R.id.but_bypass);
toMain.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent myIntent = new Intent(loginPage.this,MainActivity.class);
startActivity(myIntent);
}
});
}
@Override
public void onResume() {
super.onResume();
mAdapter.enableForegroundDispatch(this, pendingIntent, null, null);
}
@Override
public void onPause(){
super.onPause();
mAdapter.disableForegroundDispatch(this);
}
@Override
public void onNewIntent(Intent intent) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
((GlobalData) getApplication()).setUserTag(tag);
String serialID = ((GlobalData) this.getApplication()).getUserID();
if(serialID.equalsIgnoreCase("04950f4ae53f80")){
String jobPath = "USERS/04950F4AE53F80/LOGTIME/";
final DatabaseReference myRef = FirebaseDatabase.getInstance().getReference(jobPath);
// LogClass logClass = new LogClass(date.format(Calendar.getInstance().getTime()), time.format(Calendar.getInstance().getTime()),"");
// myRef.child(date.format(Calendar.getInstance().getTime())).setValue(logClass);
Intent goToConfirm = new Intent(this, confirmLogin.class);
startActivity(goToConfirm);
}else {
Toast.makeText(this,"This is not an employee!", Toast.LENGTH_SHORT).show();
}
}
}
}
}
我尝试在适配器中实现此功能,如下所示:
public class MyCustomAdapter extends ArrayAdapter<JobOverviewResourceClass> {
private ArrayList<JobOverviewResourceClass> JobResourcesclass;
//PendingIntent pendingIntent = PendingIntent.getActivity(getContext(), 0, new Intent(getContext(), getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
NfcAdapter mAdapter;
PendingIntent pendingIntent;
int i = 1;
String resourceID;
public MyCustomAdapter(Context context, int textViewResourceId, ArrayList<JobOverviewResourceClass> JobResourcesclass) {
super(context, textViewResourceId, JobResourcesclass);
this.JobResourcesclass = new ArrayList<>();
this.JobResourcesclass.addAll(JobResourcesclass);
}
private class ViewHolder {
TextView code;
TextView amnt;
CheckBox name;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
Log.v("ConvertView", String.valueOf(position));
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.job_overview_resource_checks, null);
holder = new ViewHolder();
holder.name = (CheckBox) convertView.findViewById(R.id.Resource_checkBox);
holder.code = (TextView) convertView.findViewById(R.id.Resource_checkBox_Text);
holder.amnt = (TextView) convertView.findViewById(R.id.Resource_checkBox_amount_Text);
convertView.setTag(holder);
holder.name.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
JobOverviewResourceClass resource = (JobOverviewResourceClass) cb.getTag();
Toast.makeText(getContext(),
"Clicked on Checkbox: " + cb.getText() +
" is " + cb.isChecked(),
Toast.LENGTH_LONG).show();
final Integer neededquant = resource.getmRESQUANTITY();
final String shelfresname = resource.getShelfresneeded();
//final Integer shelfquant =;
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference("RESOURCES/INVENTORY");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()
) {
ResourceInventoryClass rcs = data.getValue(ResourceInventoryClass.class);
String key = data.getKey();
resourceID = rcs.ID;
nfcStuff();
if (i == 0) {
if (rcs.NAME.equals(shelfresname)) {
final Integer shelfquant = rcs.getmQUANTITY();
i++;
final Integer NewShelfQuantity = shelfquant - neededquant;
ref.child(key).child("QUANTITY").setValue(NewShelfQuantity);
break;
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.e("Chat", "The read failed: " + databaseError.getDetails());
}
});
resource.setSelected(cb.isChecked());
//END OF ONCLICK ACTIVITY
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
JobOverviewResourceClass resource = JobResourcesclass.get(position);
holder.code.setText(resource.getmName());
String xx = Integer.toString(resource.getmRESQUANTITY());
holder.amnt.setText(" x " + xx);
holder.name.setChecked(resource.isSelected());
holder.name.setTag(resource);
return convertView;
}
public void nfcStuff() {
mAdapter = NfcAdapter.getDefaultAdapter(getContext());
pendingIntent = PendingIntent.getActivity(
getContext(), 0, new Intent(getContext(), getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
}
public void onNewIntent(Intent intent) {
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) ||
NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag != null) {
String serialID = ((GlobalData) this.getContext()).getUserID();
if (serialID.equalsIgnoreCase(resourceID)) {
i = 0;
} else {
Toast.makeText(getContext(), "This is not a resource!", Toast.LENGTH_SHORT).show();
}
}
}
}
}
公共类MyCustomAdapter扩展了ArrayAdapter{
私有ArrayList作业资源类;
//PendingEvent PendingEvent=PendingEvent.getActivity(getContext(),0,new Intent(getContext(),getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP),0);
NfcAdapter mAdapter;
下垂的下垂的;
int i=1;
字符串资源ID;
公共MyCustomAdapter(上下文上下文,int textViewResourceId,ArrayList JobResourcesclass){
超级(上下文、textViewResourceId、JobResourcesclass);
this.JobResourcesclass=newArrayList();
this.JobResourcesclass.addAll(JobResourcesclass);
}
私有类视窗持有者{
文本视图代码;
文本视图amnt;
复选框名称;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
ViewHolder=null;
Log.v(“ConvertView”,String.valueOf(position));
if(convertView==null){
LayoutInflater vi=(LayoutInflater)getContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
convertView=vi.充气(R.layout.job\u overview\u resource\u checks,null);
holder=新的ViewHolder();
holder.name=(复选框)convertView.findViewById(R.id.Resource\u复选框);
holder.code=(TextView)convertView.findViewById(R.id.Resource\u checkBox\u Text);
holder.amnt=(TextView)convertView.findViewById(R.id.Resource\u checkBox\u amount\u Text);
convertView.setTag(支架);
holder.name.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
复选框cb=(复选框)v;
JobOverviewResourceClass资源=(JobOverviewResourceClass)cb.getTag();
Toast.makeText(getContext(),
单击复选框:“+cb.getText()+
“is”+cb.isChecked(),
Toast.LENGTH_LONG).show();
最终整数needQuant=resource.getmRESQUANTITY();
最后一个字符串shelfresname=resource.getShelfresneeded();
//最终整数shelfquant=;
final DatabaseReference ref=FirebaseDatabase.getInstance().getReference(“资源/库存”);
ref.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot数据:DataSnapshot.getChildren()
) {
ResourceInventoryClass rcs=data.getValue(ResourceInventoryClass.class);
String key=data.getKey();
resourceID=rcs.ID;
nfcStuff();
如果(i==0){
if(rcs.NAME.equals(shelfresname)){
最终整数shelfquant=rcs.getmQUANTITY();
i++;
最终整数NewShelfQuantity=shelfquant-needquant;
参考子项(键).child(“数量”).setValue(NewShelfQuantity);
打破
}
}
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.e(“Chat”,“读取失败:”+databaseError.getDetails());
}
});
resource.setSelected(cb.isChecked());
//ONCLICK活动结束
}
});
}否则{
holder=(ViewHolder)convertView.getTag();
}
JobOverviewResourceClass资源=JobResourcesclass.get(职位);
holder.code.setText(resource.getmName());
字符串xx=Integer.toString(resource.getmRESQUANTITY());
holder.amnt.setText(“x”+xx);
holder.name.setChecked(resource.isSelected());
holder.name.setTag(资源);
返回视图;
}
公共无效nfcStuff(){
mAdapter=NfcAdapter.getDefaultAdapter(getContext());
PendingEvent=PendingEvent.getActivity(
getContext(),0,新意图(getContext(),getClass()).addFlags(Intent.FLAG\u ACTIVITY\u SINGLE\u TOP),0);
}
公共帐篷(意向){
String action=intent.getAction();
if(NfcAdapter.ACTION_TAG_DISCOVERED.equals)(ACTION)||
NfcAdapter.ACTION\u TECH\u DISCOVERED.equals(ACTION)){
Tag Tag=intent.getParcelableExtra(NfcAdapter.EXTRA_Tag);
如果(标记!=null){
字符串serialID=((GlobalData)this.getContext()).getUserID();
if(serialID.equalsIgnoreCase(resourceID)){
i=0;
}否则{
Toast.makeText(getContext(),“这不是资源!”,Toast.LENGTH\u SHORT.show();
}
}
}
}
}
这与我扫描标签时不一样,它会显示一个应用程序列表。并且不勾选该框请指定您需要的内容