android java / kotlin recyclerview项目不可见

我正在尝试构建一个扫描蓝牙设备的应用程序,并将其显示在回收站中。 我正在写一些使用java和kotlin中的应用程序的应用程序。 由于某些原因,我的recyclerview项目是不可见的。 有人请帮我找到我正在犯的错误。 我发布了我的活动的代码,也是我的回收者视图。 澄清我的问题。 发现成功,找到设备,并且我的适配器中的所有继承方法似乎都被调用。 我把日志消息放在里面,在回收站里我什么也看不到。 为什么没有显示出来? 这里是我用java编写的活动:

public class ToofActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener { private static final String TAG = "ToofActivity"; private static final int REQUEST_COARSE_LOCATION = 222; private static BluetoothAdapter btAdapter; private TextView mStatusLabel; private Switch mStatusSwitch; private ProgressBar mProgressBar; private RecyclerView mDeviceRecylcer; private static ArrayList<BluetoothDevice> mDevices = new ArrayList<>(); private DeviceAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_toof); checkLocationPermission(); btAdapter = BluetoothAdapter.getDefaultAdapter(); mStatusLabel = (TextView) findViewById(R.id.status_view); mStatusLabel.setText(btAdapter.isEnabled() ? "Active" : "Inactive"); mStatusSwitch = (Switch) findViewById(R.id.status_switch); mStatusSwitch.setChecked(btAdapter.isEnabled()); mStatusSwitch.setOnCheckedChangeListener(this); mProgressBar = (ProgressBar) findViewById(R.id.search_progress_bar); mDeviceRecylcer = (RecyclerView) findViewById(R.id.device_recycler); mDeviceRecylcer.setLayoutManager(new LinearLayoutManager(this)); mAdapter = new DeviceAdapter(getApplicationContext()); mDeviceRecylcer.setAdapter(mAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.searchOption: DiscoveryTask discovery = new DiscoveryTask(btAdapter, this, mProgressBar); discovery.setOnCompleteListener(new DiscoveryTask.OnCompletedListener() { @Override public void onComplete() { mAdapter.updateItems(mDevices); } }); discovery.execute((Void) null); break; } return true; } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { btAdapter.enable(); mStatusLabel.setText("Active"); } else { btAdapter.disable(); mStatusLabel.setText("Inactive"); } } public static void setDeviceList(ArrayList<BluetoothDevice> deviceList) { mDevices.clear(); mDevices = deviceList; } protected void checkLocationPermission() { if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_COARSE_LOCATION); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_COARSE_LOCATION: { if (grantResults.length <= 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED) { checkLocationPermission(); break; } } } } } 

这里是我用kotlin编写的recyclerview代码:

 class DeviceAdapter(val mContext : Context) : RecyclerView.Adapter<DeviceAdapter.DeviceHolder>(){ val mDevices = ArrayList<BluetoothDevice>() fun updateItems(list: ArrayList<BluetoothDevice>){ mDevices.clear() mDevices.addAll(list) Log.d(TAG, "updating items : $mDevices") notifyDataSetChanged() } override fun onBindViewHolder(holder: DeviceHolder, position: Int) { Log.d(TAG, "onBindViewHolder called!") holder.bindItems(mDevices.get(position)) } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): DeviceHolder{ Log.d(TAG, "onCreateViewHolder called!") val v = LayoutInflater.from(mContext).inflate(R.layout.device_item, parent, false) return DeviceHolder(v) } override fun getItemCount(): Int { return mDevices.size } inner class DeviceHolder(itemView: View) : RecyclerView.ViewHolder(itemView){ val nameView = itemView.findViewById(R.id.nameView) as TextView val addrView = itemView.findViewById(R.id.addressView) as TextView fun bindItems(btDevice: BluetoothDevice){ Log.d(TAG, "holder created!") nameView.text = btDevice.name addrView.text = btDevice.address } } companion object { val TAG = "DeviceAdapter" } } 

感谢你们对我的帮助。

这里的问题是我使用的上下文。 我的上下文是从getApplicationContext()返回的,这是不正确的。 现在我已经改变它只是使用this 。 一旦进行更改,所有的viewholder项目都可见。