Android: Как отключить элементы списка на создании списка

Я довольно плохо знаком с Android dev и все еще разрабатывающий много вещей.

Я имею показ главного меню с помощью следующего кода, но не могу разработать, как отключить выбранные пункты в меню. Кто-либо может помочь мне с некоторым примером кода?

public class listTest extends ListActivity {

    @Override
    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);
        setListAdapter(ArrayAdapter.createFromResource(this, R.array.mainMenu,
                android.R.layout.simple_list_item_1)); 
        //not sure how to disable list items here
    }

    protected void onListItemClick(ListView list, View view, int position, long id) {
        // can disable items when they are clicked on
        view.setEnabled(false);
    }   

}

и у меня есть a string-array в моем файле strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="mainMenu">
        <item>Item 1</item>
        <item>Item 2</item>
        <item>Item 3</item>
    </string-array> 
</resources>

Спасибо

19
задан Martyn 6 April 2011 в 14:39
поделиться

2 ответа

Чтобы отключить элементы списка при создании списка, необходимо создать подкласс от ArrayAdapter . Вы должны переопределить следующие методы: isEnabled (int position) и areAllItemsEnabled () . В первом случае вы возвращаете true или false в зависимости от того, включен ли элемент списка в данной позиции или нет. В последнем случае вы возвращаете false .

Если вы хотите использовать createFromResource () , вам также придется реализовать этот метод, поскольку ArrayAdapter.createFromResource () по-прежнему создает экземпляр ArrayAdapter . собственного адаптера.

Наконец, код будет выглядеть примерно так:

class MenuAdapter extends ArrayAdapter<CharSequence> {

    public MenuAdapter(
            Context context, int textViewResId, CharSequence[] strings) {
        super(context, textViewResId, strings);
    }

    public static MenuAdapter createFromResource(
            Context context, int textArrayResId, int textViewResId) {

        Resources      resources = context.getResources();
        CharSequence[] strings   = resources.getTextArray(textArrayResId);

        return new MenuAdapter(context, textViewResId, strings);
    }

    public boolean areAllItemsEnabled() {
        return false;
    }

    public boolean isEnabled(int position) {
        // return false if position == position you want to disable
    }
}
43
ответ дан 30 November 2019 в 02:20
поделиться

Я считаю, что то, включен ли элемент списка или нет, является частью состояния этого элемента, поэтому я думаю, вы необходимо управлять этим в вашем ListAdapter . При создании подкласса адаптера вы можете переопределить isEnabled (position) . Для любой позиции, которую вы здесь вернете, ListView пометит этот элемент как отключенный.

Итак, вы хотите сделать что-то вроде этого:

class MenuAdapter extends ArrayAdapter<String> {

    public boolean isEnabled(int position) {
       // return false if position == positionYouWantToDisable
    }

}

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

Затем установите настраиваемый адаптер в свой ListView.

11
ответ дан 30 November 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: