У меня есть database(SQLite)
с определенными "именами устройств", и он будет добавлен к RecyclerView
при изменении TextView
на Online / Offline в зависимости от состояния устройства.
Состояние устройства определяется, когда я выполняю onClickListener
кнопки, выполняющей эту команду:
refreshBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(getApplicationContext(),"Scanning for devices",Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(int reason) {
Toast.makeText(getApplicationContext(),"Scanning failed",Toast.LENGTH_LONG).show();
}
});
}
});
PeerListListener:
WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {
@Override
public void onPeersAvailable(WifiP2pDeviceList peerList) {
loadingBar.setVisibility(View.VISIBLE);
if(!peerList.getDeviceList().equals(peers)){
peers.clear();
peers.addAll(peerList.getDeviceList());
deviceNameArray = new String[peerList.getDeviceList().size()];
deviceArray = new WifiP2pDevice[peerList.getDeviceList().size()];
int index = 0;
int dbindex;
//loadingBar.setMax(deviceDetails.size());
//loadingBar.setProgress(0);
for(WifiP2pDevice device : peerList.getDeviceList()){
deviceNameArray[index] = device.deviceName;
System.out.printf(deviceNameArray[index]);
deviceArray[index] = device;
for(dbindex = 0;dbindex<deviceDetails.size();dbindex++) {
if(!deviceDetails.get(dbindex).getStatus().equals("lock") || !deviceDetails.get(dbindex).getStatus().equals("maintenance")) {
if (deviceDetails.get(dbindex).getDeviceNo().equals(deviceNameArray[index])) {
deviceDetails.get(dbindex).setStatus("online");
} else {
deviceDetails.get(dbindex).setStatus("offline");
}
}
}
index++;
//loadingBar.setProgress(index);
}
mAdapter = new DeviceAdapter(UserMain.this,deviceDetails);
mAdapter.notifyDataSetChanged();
mRecyclerView.setAdapter(mAdapter);
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,deviceNameArray);
// listView.setAdapter(adapter);
}
if(peers.size() == 0){
Toast.makeText(getApplicationContext(),"No Device Found..",Toast.LENGTH_SHORT).show();
return;
}
loadingBar.setVisibility(View.INVISIBLE);
}
};
Я попытался напечатать deviceNameArray иустройства отображаются в имени консоли, но RecycleView
вообще не обновляется.
Часть моего настраиваемого адаптера RecyclerView:
@NonNull
@Override
public DeviceAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.user_main_card,parent,false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(@NonNull DeviceAdapter.ViewHolder holder, final int position) {
holder.deviceNo.setText("No." +deviceDetails.get(position).getDeviceNo());
if(deviceDetails.get(position).getStatus().equals("online")) {
holder.deviceStatus.setText("ONLINE");
}else if(deviceDetails.get(position).getStatus().equals("offline") || deviceDetails.get(position).getStatus().equals("maintenance")){
if(deviceDetails.get(position).getStatus().equals("offline")){
holder.deviceStatus.setText("OFFLINE");
}else if(deviceDetails.get(position).getStatus().equals("maintenance")){
holder.deviceStatus.setText("MAINTENANCE");
}
}
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(deviceDetails.get(position).getStatus().equals("offline") || deviceDetails.get(position).getStatus().equals("maintenance")) {
Toast.makeText(mContext, deviceDetails.get(position).getDeviceName(), Toast.LENGTH_SHORT).show();
}
if(deviceDetails.get(position).getStatus().equals("online")){
((UserMain)mContext).connect(deviceDetails.get(position).getDeviceNo());
}
}
});
}
Я пытался использовать:
mAdapter.notifyDataSetChanged();
Но, похоже, это не помогает.