Показать ArrayAdapter при нажатии TextView

Поскольку мы знаем, что мы можем установить ArrayAdapter в Spinner или в ListView для заполнения данных в этих представлениях.

В моем приложении есть testView. Я хочу заполнить элемент arrayAdapter чуть ниже TestView при нажатии TextView.

Пожалуйста, найдите изображения: - В изображении, если пользователь нажмет на 4 Selected, он отобразит список.

Если пользователь коснется других частей экрана, список исчезнет.

введите здесь описание изображениявведите здесь описание изображения

В моем приложении пользователь сможет отправить сообщение. Перед отправкой сообщения пользователю необходимо выбрать из списка людей, которым он хочет отправить сообщение (как показано на изображении выше).

Предположим, он выбирает 5 человек, тогда вверху отображается «5 выбранных», и когда он нажимает «5 выбранных», мне нужно показать выбранного человека в верхней части экрана, и когда пользователь нажимает где-то еще на экране, тогда список исчезнет.

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


person Vinit ...    schedule 09.04.2015    source источник
comment
Вместо этого используйте расширяемый список   -  person kgandroid    schedule 09.04.2015
comment
Вам нужно использовать DropDown и использовать его с пользовательским адаптером. и стиль AppCompat   -  person Harry's Lab    schedule 09.04.2015
comment
@kgandroid ... расширяемый список не является решением. Когда пользователь нажимает на оставшуюся часть экрана, список должен исчезнуть, но в расширяемом списке мы не можем этого сделать.   -  person Vinit ...    schedule 09.04.2015


Ответы (2)


Сохраните текущую позицию расширенной группы в переменной. В onGroupExpanded сделайте следующее.

частный интервал lastExpandedPosition = -1; приватный ExpandableListView lv; // ваш расширяемый список...

lv.setOnGroupExpandListener (новый OnGroupExpandListener () {

@Override
public void onGroupExpand(int groupPosition) {
        if (lastExpandedPosition != -1
                && groupPosition != lastExpandedPosition) {
            lv.collapseGroup(lastExpandedPosition);
        }
        lastExpandedPosition = groupPosition;
}

});

spinner.setOnItemSelectedListener (новый AdapterView.OnItemSelectedListener() {

        public void onItemSelected(AdapterView<?> parent,View view, int i, long l) {

            String dis_name = spinner.getSelectedItem().toString();
        if (i>=1) {
                Dis_list.remove(" ");

            } 

        }



    });

и снова Dis_list.set(0," "), когда раскрывающийся список исчезнет

person vaibhav    schedule 09.04.2015
comment
@vaibhav ... НЕТ, этот код не работает ... Я хочу заполнить раскрывающийся список счетчика ... и как только вы нажмете на другую часть экрана, раскрывающийся список исчезнет ... - person Vinit ...; 09.04.2015
comment
позвольте мне проверить, получил ли я ваш вопрос: давайте рассмотрим, что мы используем сам расширяемый список, так что вы хотите, когда вы выбираете что-то из счетчика. расширяемый список должен отображать только этот элемент, и снова с этим расширяемым списком вы хотите расширить только текущий элемент. Обряд ??? - person vaibhav; 09.04.2015
comment
@vaibhav... Спасибо за ваше время и интерес... Я обновил свой вопрос. Пожалуйста, посмотрите.. - person Vinit ...; 09.04.2015
comment
я не понимаю, что вы хотите сделать, поскольку проблема перекрытия экрана может быть решена с помощью счетчика в качестве элемента списка - person vaibhav; 09.04.2015
comment
если я буду использовать представление списка, то он покажет список на том же экране, а не в верхней части экрана, и если я буду использовать счетчик, то по умолчанию на счетчике будет выбран один элемент. Я не хочу показывать какой-либо элемент. Когда пользователь нажмет (5 Selected), будет показано только имя выбранного человека. Теперь вы поняли, почему я не могу использовать счетчик или список. - person Vinit ...; 09.04.2015
comment
вставьте пустую вещь в блесну и удалите ее на кране блесны. так что по умолчанию у вас ничего не будет в первый раз - person vaibhav; 09.04.2015
comment
В нем используется setOnItemSelectedListener... удалить пустой элемент из самого массива, когда пользователь щелкает его в первый раз - person vaibhav; 09.04.2015
comment
Привет, вайбхав... Вышлите мне код... потому что я могу скрыть элемент поверх выпадающего списка, но он должен снова появиться, когда выпадающий список исчезнет.... и это не работает... - person Vinit ...; 09.04.2015

ни один из вышеперечисленных не работает для меня. В любом случае спасибо участникам за ваше время.

Я добиваюсь этого с помощью AlerDialog и ставлю его сверху.

public void showSelectedPeople(View v) {
    ArrayList<String> aListNoOfSelection = new ArrayList<String>();

    if (rows != null) {
        for (PostOptionsRow postOptionsRow : rows) {
            if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
                    && !postOptionsRow.hasChildren()
                    && postOptionsRow.isSelected()) {
                aListNoOfSelection.add(postOptionsRow.getTitle());
            } else if (postOptionsRow.getType() == PostOptionsRow.TYPE_GROUP
                    && postOptionsRow.hasChildren()
                    && postOptionsRow.getChildren() != null) {
                for (PostOptionsRow postOptionsRowInner : postOptionsRow
                        .getChildren()) {
                    if (postOptionsRowInner.isSelected()) {
                        aListNoOfSelection.add(postOptionsRowInner
                                .getTitle());
                    }
                }
            }
        }
    }

    aAdapterNoOfSelection = new NoOfSelectionAdapter(context, 0, aListNoOfSelection);

    if (aListNoOfSelection.size() == 0) {
        Toast.makeText(context, "Please select a recipient for this post.", Toast.LENGTH_SHORT).show();
        return;
    }

    ListView listView = new ListView(this);
    listView.setBackgroundColor(Color.WHITE);
    listView.setAdapter(aAdapterNoOfSelection);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(listView);

    AlertDialog dialog = builder.create();
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

    wmlp.gravity = Gravity.TOP | Gravity.LEFT;
    wmlp.x = 55; // x position
    wmlp.y = 25; // y position

    dialog.show();

}
person Vinit ...    schedule 13.04.2015