AndroidのRecyclerViewは唯一のアプリケーションを閉じて再起動した後のアイテムを表示します

LaProf:

私は私が私の地域でのWiFiデバイスの検索をトリガーする検索ボタンを持っているAPI 28に私のアプリを更新した後、私は私のRecyclerViewと不思議な効果を持っています。アイテムは、もはやリストに直接表示されません。私は、正しい表示を取得するにはアプリを閉じて再度開く必要があります。

私はボタンが押されたときに表示されるべきで乾杯を持っています。トーストメッセージはまた、唯一のアプリケーションを閉じて開いた後、表示されています。

Activity.kt

   private fun setFloatingSearchButton() {
        floating_button_discover_devices.setOnClickListener { view ->
            Snackbar.make(view, "Search for new devices ...",
                    Snackbar.LENGTH_SHORT).setAction("Action", null).show()

            discoverDevices()

            registerReceiver(mWifiReceiver, IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION))

            mWifiManager!!.startScan()
        }
    }

WifiAdapter.java

public class WifiAdapter extends RecyclerView.Adapter<WifiAdapter.ViewHolder> {

    private final int CONFIGURE_DEVICE_REQUEST_CODE = 0x00000001;

    private static final String TAG = "WifiAdapter";

    private List<DeviceWifiTo> wifis;

    private Context context;
    private Activity activity;

    public WifiAdapter(List<DeviceWifiTo> wifis) {
        this.wifis = wifis;
    }

    @Override
    public WifiAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        context = parent.getContext();
        activity = (Activity) context;
        LayoutInflater inflater = LayoutInflater.from(context);

        View wifiView = inflater.inflate(R.layout.item_wifi, parent, false);

        return new WifiAdapter.ViewHolder(wifiView);
    }

    @Override
    public void onBindViewHolder(WifiAdapter.ViewHolder holder, int position) {
        DeviceWifiTo wifi = wifis.get(position);
        Log.d(TAG, wifi.getSsid());
        TextView wifiName = holder.wifiName;
        wifiName.setText(wifi.getSsid());

        CardView cardView = holder.cardView;
        cardView.setOnClickListener(view -> {
            Intent intent = new Intent(context, ConfigureDeviceActivity.class);
            intent.putExtra("ssid", wifi.getSsid());
            activity.startActivityForResult(intent, CONFIGURE_DEVICE_REQUEST_CODE);
        });
    }

    @Override
    public int getItemCount() {
        return wifis.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        TextView wifiName;
        CardView cardView;

        ViewHolder(View itemView) {
            super(itemView);
            wifiName = itemView.findViewById(R.id.text_wifi_name);
            cardView = itemView.findViewById(R.id.cardView_device);
        }
    }

}

UcDiscoverDevicesImpl.java

private void createRecyclerView(List<DeviceWifiTo> list) {
    RecyclerView recyclerView = activity.findViewById(R.id.recycler_view_wifi);
    WifiAdapter adapter = new WifiAdapter(list);
    recyclerView.setAdapter(adapter);
    recyclerView.setLayoutManager(new LinearLayoutManager(activity.getApplicationContext()));
}
Jakirホサイン:

設定してlayout managerセットする前adapterrecycler view以下のように更新し、

private void createRecyclerView(List<DeviceWifiTo> list) {
   RecyclerView recyclerView = activity.findViewById(R.id.recycler_view_wifi);
   recyclerView.setLayoutManager(new LinearLayoutManager(activity.getApplicationContext()));
   WifiAdapter adapter = new WifiAdapter(list);
   recyclerView.setAdapter(adapter);

}

それはあなたのお役に立てば幸いです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=314729&siteId=1