Android: подсказка Spinner - программирование
Подтвердить что ты не робот

Android: подсказка Spinner

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

Спасибо!

4b9b3361

Ответ 1

Здесь решение, которое, вероятно, немного проще кода Рави Вейса (спасибо за вдохновение!):

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item) {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = super.getView(position, convertView, parent);
        if (position == getCount()) {
            ((TextView)v.findViewById(android.R.id.text1)).setText("");
            ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
        }

        return v;
    }       

    @Override
    public int getCount() {
        return super.getCount()-1; // you dont display last item. It is used as hint.
    }

};

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("Item 1");
adapter.add("Item 2");
adapter.add("Hint to be displayed");

spinner.setAdapter(adapter);
spinner.setSelection(adapter.getCount()); //display hint

Ответ 2

Вы можете настроить свой собственный асинхронный адаптер и переопределить метод getView, чтобы отобразить подсказку вместо элемента. Я создал образец проекта на github, проверьте его здесь

Ответ 3

Еще проще, чем настроить свой собственный адаптер-счетчик, - просто использовать кнопку и стилизовать ее как объект spinner с помощью

android:background="@android:drawable/btn_dropdown"

Затем установите кнопку onClick для открытия диалогового окна выбора одного элемента. Затем вы можете делать все, что хотите, с текстом кнопки.

Это был мой предпочтительный способ обработки этого на некоторое время. Надеюсь, это поможет кому-то.

EDIT: Я недавно общался с этим (и кто-то попросил меня опубликовать пример некоторое время назад). Эта стратегия будет выглядеть несколько иначе, если вы используете тему Holo. Однако, если вы используете другие темы, такие как Theme.Black, это будет выглядеть одинаково.

Чтобы продемонстрировать это, я сделал простое приложение, в котором есть как обычный Spinner, так и собственный пользовательский счетчик. Я бросил это в GitHub repo, но вот как выглядит действие:

package com.stevebergamini.spinnerbutton;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Spinner;

public class MainActivity extends Activity {

    Spinner spinner1;
    Button button1;
    AlertDialog ad;
    String[] countries;

    int selected = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner1 = (Spinner) findViewById(R.id.spinner1);
        button1 = (Button) findViewById(R.id.button1);

        countries = getResources().getStringArray(R.array.country_names);

        //  You can also use an adapter for the allert dialog if you'd like
        //  ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countries);        

        ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected,  
                new  DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            button1.setText(countries[which]);
                            selected = which;
                            ad.dismiss();

                        }}).setTitle(R.string.select_country).create(); 


        button1.setOnClickListener( new OnClickListener(){

            @Override
            public void onClick(View v) {
                ad.getListView().setSelection(selected);
                ad.show();              
            }});

    }
}