Как установить спиннер при открытии макета в этом случае?

Я использую эту библиотеку https://github.com/orhanobut/dialogplus

Когда я нажимаю кнопку, я открываю макет диалога, который включает в себя EditText а также Spinner,

Моя проблема в том, что я не знаю, как настроить мой Spinner элемент, когда раскладка диалога открыта. Эта библиотека заставляет меня объявить мой Spinner под setOnClickListenerпотому что я должен использовать dialog.getHolderView() чтобы получить представление. Я думаю, что это проблема, но я не знаю, как это исправить.

В моем коде я должен нажать на Spinner тогда мой предмет будет добавлен.

Вот мой код:

public void openSearchLayout() {
    DialogPlus dialog = DialogPlus.newDialog(getActivity())
            .setContentHolder(new ViewHolder(R.layout.search_layout))
            .setGravity(Gravity.TOP)
            .setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(DialogPlus dialog, View view) {

                    EditText presenterEdit = (EditText) dialog.getHolderView().findViewById(R.id.presenterEdit);
                    final Spinner searchDate = (Spinner) dialog.getHolderView().findViewById(R.id.searchDate);
                    // Clear spinner data
                    dateList.clear();
                    // Set spinner item function
                    showRoute(myJson, searchDate);
                    switch (view.getId()) {
                        case R.id.searchDate:
                            searchDate.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                                @Override
                                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                    // Clear spinner data
                                    arrayList.clear();
                                    // Search the spinner item value list
                                    showDateRoute(myJson, searchDate.getSelectedItem().toString());
                                }
                                @Override
                                public void onNothingSelected(AdapterView<?> parent) {
                                }
                            });
                            break;

                        case R.id.searchButton:
                            String testString = presenterEdit.getText().toString();
                            Toast.makeText(getActivity(), testString, Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            })
            .setExpanded(true, 900)  // This will enable the expand feature, (similar to android L share dialog)
            .create();
    dialog.show();
}

Вот мой пользовательский макет для диалога:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingTop="16dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/signUpDate"
            android:textColor="@android:color/black"
            android:textSize="18dp" />

        <Spinner
            android:id="@+id/searchDate"
            android:layout_width="match_parent"
            android:layout_height="38dp"
            android:layout_gravity="center"
            android:layout_marginLeft="24dp"
            android:layout_marginRight="16dp"
            android:background="@drawable/spinner_arrow"
            android:spinnerMode="dropdown"
            android:theme="@style/mySpinnerStyle" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingTop="16dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/circlePresenter"
            android:textColor="@android:color/black"
            android:textSize="18dp" />

        <EditText
            android:id="@+id/presenterEdit"
            android:layout_width="match_parent"
            android:layout_height="38dp"
            android:layout_gravity="center"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="16dp"
            android:background="@drawable/search_edit"
            android:spinnerMode="dropdown" />

    </LinearLayout>

    <Button
        android:id="@+id/searchButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        android:background="@drawable/corner_search"
        android:text="@string/integralDateSearch"
        android:textColor="@android:color/white"
        android:textSize="20dp" />

</LinearLayout>

Любая помощь будет оценена. Заранее спасибо.

Согласно ответу Reaz, я обновляю это так:

ViewHolder dialogViewHolder = new ViewHolder(R.layout.search_layout);
LayoutInflater inflater =LayoutInflater.from(getActivity());
final EditText presenterEdit = (EditText) dialogViewHolder.getView(inflater, null).findViewById(R.id.presenterEdit);
final Spinner searchDate = (Spinner) dialogViewHolder.getView(inflater, null).findViewById(R.id.searchDate);
// Clear spinner data
dateList.clear();
// Set spinner item function
showRoute(myJson, searchDate);

DialogPlus dialog = DialogPlus.newDialog(getActivity())
        .setContentHolder(dialogViewHolder)
        //.....

1 ответ

Решение

Вы можете попробовать следующее, получая представление из инициализации диалога. Сначала инициализируйте представление, заполните спиннер, а затем передайте его в диалоговое окно в конструкторе вашего ViewHolder,

Я проверил это. И это работает в моем устройстве.

public void openSearchLayout() {
    View view = getLayoutInflater().inflate(R.layout.search_layout, null);
    final EditText presenterEdit = (EditText) view.findViewById(R.id.presenterEdit);
    final Spinner searchDate = (Spinner) view.findViewById(R.id.searchDate);
    // Clear spinner data
    dateList.clear();
    // Set spinner item function
    showRoute(searchDate);

    DialogPlus dialog = DialogPlus.newDialog(MainActivity.this)
            .setContentHolder(new ViewHolder(view))
            .setGravity(Gravity.TOP)
            .setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(DialogPlus dialog, View view) {
                    switch (view.getId()) {
                        case R.id.searchDate:
                            searchDate.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                                @Override
                                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                                    // Clear spinner data
                                    //arrayList.clear();
                                    // Search the spinner item value list
                                    //showDateRoute(myJson, searchDate.getSelectedItem().toString());
                                }

                                @Override
                                public void onNothingSelected(AdapterView<?> parent) {
                                }
                            });
                            break;

                        case R.id.searchButton:
                            String testString = presenterEdit.getText().toString();
                            Toast.makeText(MainActivity.this, testString, Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            })
            .setExpanded(true, 900)  // This will enable the expand feature, (similar to android L share dialog)
            .create();
    dialog.show();
}

Я заполнил элементы в счетчике, используя следующую функцию. Просто нужно было добавить образец showRoute функция для проверки правильности заполнения пунктов.

public void showRoute(Spinner spinner) {
    List<String> spinnerArray = new ArrayList<String>();
    spinnerArray.add("item1");
    spinnerArray.add("item2");

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
            this, android.R.layout.simple_spinner_item, spinnerArray);

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
}
Другие вопросы по тегам