Android 在适配器中使用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

您好,我正在使用自定义适配器填充复选框的列表视图。主要活动是一个片段(不是活动)。 每个复选框都有名称和ID,例如Shells-12345。我试图做的是当屏幕加载,用户扫描RFID标签时,它读取标签ID,例如12345,如果他们的ID匹配,复选框就会被选中。 我怎样才能做到这一点

任何帮助都将不胜感激,谢谢

编辑: 我在登录部分使用了nfc,如下所示:

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();
}
}
}
}
}
这与我扫描标签时不一样,它会显示一个应用程序列表。并且不勾选该框

请指定您需要的内容