Заполнение счетчика в диалоговом окне предупреждения

#android #broadcastreceiver #android-spinner #android-alertdialog #android-dialogfragment

#Android #broadcastreceiver #android-счетчик #android-alertdialog #android-dialogfragment

Вопрос:

У меня есть класс, который расширяет DialogFragment в рамках моей основной деятельности. Цель этого класса — вызвать диалоговое окно со счетчиком и отредактировать текст, а затем вернуть эти строки в основное действие. У меня возникла проблема с заполнением моего счетчика. Предполагается, что счетчик отображает список доступных сетей Wi-Fi, но вместо этого он ничего не показывает.

Итак, мой вопрос в том, как я могу использовать свой класс широковещательного приемника для заполнения счетчика, когда это необходимо в диалоговом окне оповещения? Спасибо за любую помощь, вот код, который у меня есть в настоящее время…

Редактировать

Я выполнил некоторую проверку ошибок в своей программе, и кажется, что широковещательный приемник никогда не вызывается из фрагмента диалогового окна, как я могу запустить широковещательный приемник, который находится во фрагменте диалогового окна?

 public static class MyAlertDialogFragment extends DialogFragment {
    Spinner sp;
    WifiManager mainWifiObj;
    WifiScanReceiver wifiReciever;
    ListView list;

    String wifis[];
    EditText nameANick;
    public static final String MyPREFERENCES = "MyPrefs";
    public static final String Name = "nameKey";
    SharedPreferences sharedpreferences;

    public static MyAlertDialogFragment newInstance(String title) {
        MyAlertDialogFragment frag = new MyAlertDialogFragment();
        Bundle args = new Bundle();
        args.putString("title", title);
        frag.setArguments(args);
        return frag;
    }

    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.i("Dialog", "OnCreate");

        sharedpreferences = getActivity().getSharedPreferences(MyPREFERENCES,
                Context.MODE_PRIVATE);

        mainWifiObj = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
        wifiReciever = new WifiScanReceiver();
        mainWifiObj.startScan();
    }

    public void onDestroy() {
        getActivity().unregisterReceiver(wifiReciever);
        super.onDestroy();

    }

    class WifiScanReceiver extends BroadcastReceiver {
        @SuppressLint("UseValueOf")
        public void onReceive(Context c, Intent intent) {
            List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
            wifis = new String[wifiScanList.size()];
            int j = 0;

            if (sharedpreferences.contains(Name)) {
                wifis[0] = sharedpreferences.getString(Name, "");
                for (int i = 1; i < wifiScanList.size(); i  ) {
                    wifis[i] = ((wifiScanList.get(j).SSID));
                    j  ;
                }
            } else {
                for (int i = 0; i < wifiScanList.size(); i  ) {
                    wifis[i] = ((wifiScanList.get(j).SSID));
                    j  ;
                }

            }
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                    getActivity(), android.R.layout.simple_spinner_item,
                    wifis);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            sp.setAdapter(adapter);
        }
    }

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        LinearLayout root = (LinearLayout) inflater.inflate(
                R.layout.my_dialog, null);

        nameANick = (EditText) root.findViewById(R.id.editText1);
        sp = (Spinner) root.findViewById(R.id.spinner1);


        return new AlertDialog.Builder(getActivity())
                .setTitle("Set Nickname1")
                .setView(root)
                .setPositiveButton("Save",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,

                                ((MainActivity) getActivity())
                                        .doPositiveClick();
                            }
                        })
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                    int whichButton) {
                                ((MainActivity) getActivity())
                                        .doNegativeClick();
                            }
                        }).create();
    }
}
 

Ответ №1:

Я изменил логику программы, и теперь она работает. Вместо объявления широковещательного приемника внутри класса диалогового окна оповещения, вызовите его с помощью onCreate основного действия. Таким образом, вы можете передать массив строк во фрагмент диалогового окна, а затем заполнить счетчик этим.